2013-10-28 7 views
0

게임에서 특정 단어가 채팅되지 않도록 검열하려고합니다. 유일한 문제는 플레이어가 단어 위에 추가하여 내 검열을 무효화 할 수 있다는 것입니다. 여기에 예제가 있습니다.문자열 검열

//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라고 말하면 중간에 간격을 두지 않으면 내 검열을 쉽게 피할 수 있다는 것이 문제입니다. 나는 단어를 검사하는 것만으로는 충분하지 않은 검열을 어떻게 할 수 있는가?

+2

또는 'bag gins'또는 'bag-gins'또는 'bagins'또는 'baagins'또는 'bagg1ns'라고 말할 수 있습니다. 단어 검열은 거의 불가능한 일입니다. – Doorknob

+4

이것은 불가능합니다. 참조 : http://stackoverflow.com/a/6099598/922184 – Mysticial

+0

개인적인 경험을 통해 나는 이것이 거의 불가능하다는 것을 안다. 그러나, 나는 지금 끝없는 - 또는 그 밖의 것들로 무례한 단어들을 검열하는 길을 찾고있다. – baseman101

답변

1

두 단어 경계를 제거하십시오. 두 개의 \ b입니다. 나는 StringUtils에 필요한 추가 라이브러리를 귀찮게하고 싶지 않았다, 그래서 나는 코드를 수정 조금 있지만, 여기에 내가 테스트 작업은 다음과 같습니다

import java.util.*; 
import java.lang.*; 
import java.io.*; 
import java.util.regex.*; 

class Ideone { 
    public static void main(String[] args) throws java.lang.Exception { 
     // Check for rude words before sending to server 
     String result = "heres bilbobaggins haha"; 
     String patternString = "(bilbo|baggins|in|the|shire)"; 
     Pattern pattern = Pattern.compile(patternString); 
     Matcher findRudeWords = pattern.matcher(result.toLowerCase()); 

     while (findRudeWords.find()) { 
      // Replace the bad word with asterisks 
      result = result.replaceAll("(?i)" + findRudeWords.group(1), "*"); 
     } 
     System.out.println("result=" + result); 
    } 

} 

출력 :

result=heres ** haha 

그리고 당신은 재생할 수 있습니다 http://ideone.com/72SU7X

+0

감사합니다. 매력! 건배! – baseman101