Java编码审查词

Java编码审查词,java,bukkit,Java,Bukkit,我正在开发一个用Java编写的插口插件,希望对玩家聊天信息进行审查。我试图使用#replaceAll()检查它,但它检查的次数超过了它应该检查的次数 我的代码是(使用的示例单词) 输出为 “打开”->“打开**” 但它也取代了 “我做过一次”->“我做过**ce” 有没有一种更好的方法可以替代它到正确的星号上,但是如果它在单词中就没有了 如果他们试图使用 “o n”或“o.n”我尝试忽略空格,但如果他们键入两个实际单词,如“to no”,则会触发此错误,其中包含“on”,但没有空格。您可以使用\

我正在开发一个用Java编写的插口插件,希望对玩家聊天信息进行审查。我试图使用#replaceAll()检查它,但它检查的次数超过了它应该检查的次数

我的代码是(使用的示例单词)

输出为 “打开”->“打开**”

但它也取代了 “我做过一次”->“我做过**ce”

有没有一种更好的方法可以替代它到正确的星号上,但是如果它在单词中就没有了

如果他们试图使用
“o n”或“o.n”我尝试忽略空格,但如果他们键入两个实际单词,如“to no”,则会触发此错误,其中包含“on”,但没有空格。

您可以使用
\b
标志将正则表达式更改为仅匹配单词边界:

text.replaceAll("\\bon\\b", "**");
(您需要额外的反斜杠来转义反斜杠,否则Java会将其视为特殊字符(可能是反斜杠))


也就是说,由于正则表达式不理解上下文,使用正则表达式的结果总是很差。自然语言处理库(请参阅您选择的搜索引擎)将更难使用,但会获得更好的结果。

相关:这篇文章是关于这个主题的非常好的读物:在Minecraft聊天环境中使用正则表达式可能是危险的,因为玩家可以做类似o.n,o…..n o…..n的事情
text.replaceAll("\\bon\\b", "**");