【发布时间】:2013-11-07 21:33:43
【问题描述】:
我正试图在游戏中阻止某些单词被聊天。唯一的问题是玩家可以通过添加文字来取消我的审查员。这是一个例子。
//Check for rude words before sending to server
List<String> tokens = new ArrayList<String>();
tokens.add("bilbo");
tokens.add("baggins");
tokens.add("in");
tokens.add("the");
tokens.add("shire");
String patternString = "\\b(" + StringUtils.join(tokens, "|") + ")\\b";
Pattern pattern = Pattern.compile(patternString);
Matcher findRudeWords = pattern.matcher(result.toLowerCase());
while (findRudeWords.find()) {
//Replace the bad word with astericks
String asterisk = StringUtils.leftPad("", findRudeWords.group(1).length(), '*');
result = result.replaceAll("(?i)" + findRudeWords.group(1), asterisk);
}
长期存在的问题是,如果有人说 bilbobaggins,中间没有空格,我的审查员可以很容易地避开。我怎么能做一个不只是检查单词的足够的审查器?
【问题讨论】:
-
或者他们可以说
bag gins,或bag-gins,或bagins,或baagins,或bagg1ns,或者......你明白了。审查文字几乎是一项不可能完成的任务。 -
这是不可能的。见:stackoverflow.com/a/6099598/922184
-
我从个人经验中知道这几乎是不可能的。但是,我现在正试图找到一种方法来审查带有 -ing 或诸如此类的粗鲁的话。