【问题标题】:Java coding censor wordsJava 编码审查词
【发布时间】:2018-07-07 10:20:35
【问题描述】:

我正在开发一个用 Java 编码的 Spigot 插件,并希望审查玩家聊天消息。我试图使用 #replaceAll() 对其进行审查,但它审查的内容超出了它应该的程度

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

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

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

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

有没有更好的方法来做到这一点,将它替换为正确的星星,但如果它在单词中就不会得到它。

如果有可能在他们试图绕过时阻止它使用 “on”或“o.n”我尝试忽略空格,但如果他们输入两个实际单词,例如“to no”,其中包含“on”而没有空格,就会触发。

【问题讨论】:

标签: java bukkit


【解决方案1】:

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

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

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

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

【讨论】:

  • 在 Minecraft 聊天环境中使用正则表达式可能很危险,因为玩家可以执行诸如 o.n、o.....n o....n 之类的操作
猜你喜欢
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多