我正在用java编写一个基本的脏话过滤器来检测用户输入的脏话。我并不是试图处理所有可能的情况,我知道仅使用计算机可能无法解决这些情况。但是,我确实想处理计算机应该适合处理的一些基本场景。在这种特殊情况下,我试图检测试图通过在字母之间使用空格来破坏过滤器的用户。例如:“你好,我在这里使用 s m u r f 词”。 (蓝 Sprite 在这里是“坏”词)。
在我当前的实现中,我保留了检查输入文本的单词列表:
public boolean containsBadWords (String text) {
for (String word : badWords) {
if (text.matches (".*\\b" + word +"\\b.*")) {
return (true);
}
}
return (false);
}
但这无法解决我上面描述的空格字母问题。
有人知道如何使用 Java 折叠这些单词,以便我可以使用基本文本匹配算法处理它们吗?
最佳答案
准备一个禁用单词列表,检查单词,将单词转换为正则表达式,例如“smurf”->“s *m *u *r *f *”
String regex = " " + word.replaceAll("(.)", "$1 *") + " ";
并尝试在文本中找到它
boolean found = Pattern.compile(regex).matcher(text).find();
关于java - 删除单词字母之间的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17892888/