2010-07-09 77 views
7

我想的是這樣的:解析C#中「壞」字的字符串的最佳方式是什麼?

foreach (var word in paragraph.split(' ')) { 
    if (badWordArray.Contains(word) { 
    // do something about it 
    } 
} 

,但我敢肯定有一個更好的辦法。

在此先感謝!

UPDATE 我不希望自動...刪除淫穢我的web應用程序,我想如果我認爲「糟糕」一詞是用來通知。然後我會自己檢查一下,確保它是合法的。一個自動標記系統的種類。

+0

我繼續編輯我的解決方案以響應您的更新。讓我知道這是否回答你的問題。 – rakuo15 2010-07-09 10:29:02

+0

可能的重複[你如何實現一個良好的褻瀆過濾?](http://stackoverflow.com/questions/273516/how-do-you-implement-a-good-profanity-filter) – 2010-10-22 16:21:53

回答

15

儘管您的方法有效,但可能會耗費一些時間。對於之前的SO問題,有一個wonderful response here。雖然這個問題談論的是PHP而不是C#,但我認爲它可以很容易地移植。

編輯補充示例代碼:

public string FilterWords(string inputWords) { 
    Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)"); 
    return wordFilter.Replace(inputWords, "<3"); 
} 

這應該爲你工作,或多或少。

編輯回答OP澄清:

我不希望刪除淫穢自動...我的web應用程序,我想我們會通知您一個字,我認爲「壞」字。

就像上面的替換部分,你可以看到,如果像這樣匹配:

public bool HasBadWords(string inputWords) { 
    Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)"); 
    return wordFilter.IsMatch(inputWords); 
} 

它將返回true,如果你傳遞給它的字符串包含列表中的任何話。

+1

通常「少」。 – 2010-07-09 03:32:43

+11

如果你打算這樣做,**不要忘記'\ b' **。這是一個愚蠢的錯誤。 – 2010-07-09 03:34:02

+1

+1屁股和邊界 – 2010-07-09 03:51:51

1

您可以考慮使用HashKey對象或Dictionary<T1, T2>代替數組,因爲使用Dictionary可以使代碼更高效,因爲.Contains()方法變成了.Keys.Contains()方法,效率更高。如果你有大量的褻瀆詞(特別是不知道有多少人!)

4

在我的工作中,我們在自己的軟件中加入了一些自動壞詞過濾功能(瀏覽源代碼和突然跑過包含幾頁淫穢內容的數組)。

一個提示是在對您的列表進行測試之前對用戶輸入進行預處理,在這種情況下,有人試圖偷偷摸摸地看你的東西。因此,通過預處理的方式,我們

  • 大寫一切都在輸入
  • 除去大多數非字母數字(即,只是拼接任何空格或標點符號等)
  • 再假設有人試圖通過數字字母,做這樣的事情:用0代替零,9用G,5用S等(得到創意)

然後讓一些朋友試圖打破它。好有趣。

+0

我喜歡這個...簡單而有效的爲我的目的。謝謝。 – Chaddeus 2010-07-09 09:17:36

+1

不僅如此,要求你的朋友打破它是一個很好的QA和一個美好的夜晚:) – Flater 2013-11-27 09:18:33

相關問題