我有两个字符串要比较
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/