字符串替换为条件不是单词 Java 的子部分



>字符串替换我想要的更多更改。 例如

String input = "The blue house Theatres";
input = input.replace("the", "AAA");

输出它将是:

"AAA blue house AAAatres"

我不抱怨改变什么时候是一个词的子部分。

首先,您应该尝试使用replaceAll(regex, replacement)而不是replace(literal, replacement)因为后者仅适用于文字,即您不能使用表达式,而前者使用正则表达式来查找匹配项。

接下来,您的正则表达式应使用单词边界,例如bthebb标记单词边界的位置。

最后,如果您想进行不区分大小写的替换,则需要处理 epxression 中可能的情况(例如b[tT]heb) 或通过在表达式前面加上(?i)将表达式切换到不区分大小写的模式,即(?i)btheb.请注意,表达式[tT]he不匹配THE而不区分大小写的表达式会匹配,因此根据您的要求,您需要选择一个或另一个。

使用你会得到的所有input = input.replaceAll("(?i)\bthe\b", "AAA");.

编辑

根据您对问题的评论,您不想使用单词边界,而只想查找前后的字符。您可以通过消极的环顾四周的表达来实现这一点,
例如(?i)(?<![a-z])the(?![a-z]).请注意,我在这里使用了非常简单的字符类[a-z],如果您需要排除更多字符,则需要扩展它。

上面的表达式将匹配!ThetheTHE?等,但不能匹配Theatreaether等,因为if要求匹配前面没有字符((?<![a-z])),后面不跟一个
字符((?![a-z]))。

使用带有单词边界的正则表达式b

String input = "The blue house Theatres";
input.replaceAll("\bThe\b", "AAA");

最新更新