替换java中的字符串,独立于空格

时间:2018-04-09 09:35:36

标签: java string replace whitespace

我需要使用java替换字符串,但问题是搜索字符串可能比原始字符串有更多或更少的空格。

所以,让我们说我们搜索

"find   me"

它应匹配其中任何一个:

- "find me"
- "find       me"
- "find \n\r me"
- "find \t me"

原因是搜索字符串来自jsoup元素innerhtml(),它具有插入空格的逻辑。

当然,使用一些智能正则表达式可以做到这一点,但是我们必须安全地从搜索字符串中逃避正则表达式字符串(这不能保证只是一个简单的字母字符串,就像搜索字符串是& #39; ABC DEF'?)

此外,预先从输入中替换所有双空格不是一种选择。

2 个答案:

答案 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+" ) );