java,如何判断一个字符串是否包含特定顺序的子字符串

标签 java string

我有两个字符串要比较

String st1 = "database-2.0/version\"25-00\"";
String st2 = "database2.0version25";

我想确定 st1 是否包含 st2。在提供的示例中,我希望得到"is"作为答案,因为 st2 中的字符顺序与 st1 相同,并且仅缺少一些字符。 Java库中有没有函数可以做这样的比较?我知道 st1.indexOf(st2)st1.contains(st2) 但它们在这种情况下不起作用,都返回 false。

最佳答案

试试这个:

String regex = st2.chars()
                  .mapToObj(i -> String.valueOf((char) i))
                  .map(str -> ".*+?^${}()|[]\\".contains(str) ? "\\" + str : str)
                  .collect(Collectors.joining(".*", ".*", ".*"));

boolean contains = st1.matches(regex);

以下是概要:

  • 获取较短字符串的正则表达式字符串(在我们的例子中为 st2 - 硬编码 - 当然您可以自动执行此操作),在前面添加 .*和后面,以及每个字符之间。 (.* 匹配 0 个或多个任意字符)。

  • String.chars() 返回一个 IntStream,通过类型转换将其转换为 String

  • 正如 @Robert 建议的那样,用反斜杠转义特殊字符。

  • 检查较长的字符串匹配,这实际上意味着它包含短字符串的所有个字符,甚至可能更多。

关于java,如何判断一个字符串是否包含特定顺序的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47539310/

相关文章:

java - 什么时候应该使用泛型来定义类型之间的关系?

java - 为什么我不能使用 JMockit 模拟数学

java - 追加字符串

string - 如何将大型 XML 字符串插入 Oracle 表中?

java - 如何确定一个字符串是否是另一个字符串的子序列而不考虑其间的字符?

java - 区分String和UUID的万无一失的方法

php - 自动更改空格和下划线

java - JPanel 中的组件自动消失

java - java.util.List 的 contains 方法线程安全吗?

string - 打印 Int(或 Int 到 String)