我实际上正在开发一个解析器而且我坚持使用一种方法。
我需要清除某些句子中的特定单词,这意味着用空格或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
替换为空格的情况下,将所有单词替换出来。
是否有人可以帮助我更换我的句子中要替换的确切单词?
提前致谢!
答案 0 :(得分:2)
您的代码中存在两个问题:
\b
要解决此问题,请按以下方式构建正则表达式:
sentence = sentence.replaceAll("(?i)\\b\\Q" + s + "\\E\\b", " ");
或
sentence = sentence.replaceAll("(?i)\\b" + Pattern.quote(s) + "\\b", " ");