如何替换字符串中特定的子字符串并忽略java中不完整的匹配?

时间:2015-07-17 08:13:59

标签: java regex string

在我的应用程序中,我使用.replaceAll()给出字典单词建议并用建议的单词替换所选单词。但是,这将替换整个字符串中的每个子字符串

例如在此String中,

String sentence = "od and not odds as a sample sam. but not odinary";

如果我建议第一个单词为奇数 .replaceAll()会将每次出现的 od 替换为奇数,从而影响第四个单词奇数并将句子更改为

sentence.replaceAll("od", "odd");



//sentence String becomes
sentence ="odd and not oddds as a sample sam. but not oddinary"

od 替换为奇数会影响其中包含 od 字符的所有其他字词。

任何人都能帮助我提供更好的方法吗?

3 个答案:

答案 0 :(得分:4)

使用正则表达式。对于你的例子,“\ bod \ b”将匹配od作为整个单词。 \ b是单词边界,表示单词的开头或结尾(无论是以点还是空白或其他任何结尾)。

replaceAll方法已经可以使用正则表达式,但如果需要更多功能,可以查看Matcher类。

String REPLACE_WORD = "od"
sentence.replaceAll("\\b" + REPLACE_WORD + "\\b", "odd");

会给你正确的答案。 \告诉java你要写\而不是\ b(它首先解析字符串,然后将该字符串解析为正则表达式)。

答案 1 :(得分:0)

使用replaceAll()方法中的正则表达式:

\bod\b

这将过滤掉任何其他单词中od的出现次数。 当然,当您在Java方法中使用它时,您需要转义\

所以

replaceAll("\\bod\\b", "odd");

应该这样做。

答案 2 :(得分:0)

如上所述,您可以使用来自Matcher的{​​{1}},它具有许多有用的功能。

Java.util.regex.*

输出结果为:

  

我发现了一种奇怪的气味。