用另一个替换特定的字符串 - String#replaceAll()

时间:2016-03-09 10:47:17

标签: java regex parsing replaceall

我实际上正在开发一个解析器而且我坚持使用一种方法。

我需要清除某些句子中的特定单词,这意味着用空格或null字符替换它们。 现在,我想出了这段代码:

private void clean(String sentence)
{
    try {
        FileInputStream fis = new FileInputStream(
                ConfigHandler.getDefault(DictionaryType.CLEANING).getDictionaryFile());
        BufferedReader bis = new BufferedReader(new InputStreamReader(fis));
        String read;
        List<String> wordList = new ArrayList<String>();

        while ((read = bis.readLine()) != null) {
            wordList.add(read);
        }
    }
    catch (IOException e) {
        e.printStackTrace();
    }

    for (String s : wordList) {
        if (StringUtils.containsIgnoreCase(sentence, s)) { // this comes from Apache Lang
            sentence = sentence.replaceAll("(?i)" + s + "\\b", " ");
        }
    }

    cleanedList.add(sentence);

} 

但是当我查看输出时,我在sentence替换为空格的情况下,将所有单词替换出来。

是否有人可以帮助我更换我的句子中要替换的确切单词?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您的代码中存在两个问题:

  • 字符串
  • 之前缺少\b
  • 如果文件中的任何字词有特殊字符,您将遇到问题

要解决此问题,请按以下方式构建正则表达式:

sentence = sentence.replaceAll("(?i)\\b\\Q" + s + "\\E\\b", " ");

sentence = sentence.replaceAll("(?i)\\b" + Pattern.quote(s) + "\\b", " ");