Java编码检查词

时间:2018-07-07 10:20:36

标签: java bukkit

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

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

public static String filter(String message) {
    return message.replaceAll("(?i)on", "**");
}

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

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

是否有更好的方法可以将其替换为正确的星星,但如果单词正确,则无法获取。

如果他们尝试绕过使用,也可以阻止它 我尝试忽略“ o n”或“ o.n”,但是如果他们键入两个实际的单词(例如“ to no”),其中包含不带空格的“ on”,则会触发空格。

1 个答案:

答案 0 :(得分:2)

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

text.replaceAll("\\bon\\b", "**");

(您需要一个额外的反斜杠来转义反斜杠,否则Java会将其视为特殊字符(可能是空格))。

也就是说,使用正则表达式总是会给您带来糟糕的结果,因为您的正则表达式无法理解上下文。自然语言处理库(请参见您选择的搜索引擎)将更难使用,但可获得更好的结果。