我需要使用java替换字符串,但问题是搜索字符串可能比原始字符串有更多或更少的空格。
所以,让我们说我们搜索
"find me"
它应匹配其中任何一个:
- "find me"
- "find me"
- "find \n\r me"
- "find \t me"
原因是搜索字符串来自jsoup元素innerhtml(),它具有插入空格的逻辑。
当然,使用一些智能正则表达式可以做到这一点,但是我们必须安全地从搜索字符串中逃避正则表达式字符串(这不能保证只是一个简单的字母字符串,就像搜索字符串是& #39; ABC DEF'?)
此外,预先从输入中替换所有双空格不是一种选择。
答案 0 :(得分:0)
这里一个简单的方法是修剪搜索和目标字符串,然后规范化所有剩余的空格:
boolean match(String input, String term) {
if (input == null || term == null) {
return false;
}
String s1 = input.trim().replaceAll("\\s+", " ");
String s2 = term.trim().replaceAll("\\s+", " ");
return s1.equals(s2);
}
答案 1 :(得分:0)
当然,使用一些智能正则表达式可以做到这一点,但是我们必须安全地从搜索字符串中逃避正则表达式字符串(这不能保证只是一个简单的字母字符串,就像搜索字符串是& #39; ABC DEF'?)
这正是我要做的事情:
Pattern.quote(...)
\\s+
的元素
示例:
String searchRegex = Arrays.stream( searchString.split( "\\s+" ) )
.map( s -> Pattern.quote( s ) )
.collect( Collectors.joining( "\\s+" ) );