2013-07-27 162 views
0

我在Java中放置了一個基本的褻瀆過濾器來檢測用戶輸入的褻瀆。我不想處理所有可能的情況,我知道這可能無法用電腦解決。但是,我確實想要處理一些計算機應該適合處理的基本場景。在這種特殊情況下,我試圖檢測用戶試圖通過在字母之間使用空格來打破過濾器。例如:「你好,我在這裏使用一個簡單的詞」。 (smurf在這裏是「壞」字)。刪除字母之間的空格

在我目前的實現我保持我覈對輸入文本的單詞列表:

public boolean containsBadWords (String text) { 

    for (String word : badWords) { 
     if (text.matches (".*\\b" + word +"\\b.*")) { 
      return (true); 
     } 
    } 

    return (false); 
} 

但這不會處理我上述的間隔字母的問題。

任何人都知道如何使用Java摺疊這些單詞,所以我可以使用基本的文本匹配算法處理它們?

+2

那麼,你的問題是什麼? – drvdijk

+2

刪除句子中的所有空格並搜索邪惡的子字符串。雖然會發現一些誤報。 – zapl

+1

這似乎不是一個基本的案例......但是想到的可能不是最好的。比較每個字符以查看它是否爲空白。如果是,則保存該字符的位置以及該字符的任何位置,從字符串中刪除所有空格,查看該字符串是否包含壞字,如果不是,則替換所有空白。 – 2013-07-27 00:22:53

回答

1

準備的禁止單詞的列表,去了的話,轉換詞成正則表達式,如 「藍精靈」 - > 「S * M * U * R * F *」

String regex = " " + word.replaceAll("(.)", "$1 *") + " "; 

,並設法找到它在文本

boolean found = Pattern.compile(regex).matcher(text).find();