게임에서 특정 단어가 채팅되지 않도록 검열하려고합니다. 유일한 문제는 플레이어가 단어 위에 추가하여 내 검열을 무효화 할 수 있다는 것입니다. 여기에 예제가 있습니다.문자열 검열
//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'라고 말할 수 있습니다. 단어 검열은 거의 불가능한 일입니다. – Doorknob
이것은 불가능합니다. 참조 : http://stackoverflow.com/a/6099598/922184 – Mysticial
개인적인 경험을 통해 나는 이것이 거의 불가능하다는 것을 안다. 그러나, 나는 지금 끝없는 - 또는 그 밖의 것들로 무례한 단어들을 검열하는 길을 찾고있다. – baseman101