有一个禁止的单词列表(或更一般的字符串)和另一个列表,让我们说用户邮件.我想从所有邮件中删除所有被禁止的单词.
琐碎的例子:
foreach(string word in wordsList)
{
foreach(string mail in mailList)
{
mail.Replace(word,String.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能改进这个算法?
谢谢你的建议.我投了几个答案,但我没有给任何答案标记,因为它更像是讨论而不是解决方案.有些人错过了带有坏词的禁词.在我的情况下,我不必费心去识别'sh1t'或类似的东西.
亵渎过滤的简单方法不起作用 - 复杂的方法在大多数情况下都不起作用.
当你得到像'密码'这样的作品并想要过滤掉"屁股"时会发生什么?当一些聪明的人写'a $$'时会发生什么 - 意图仍然清晰,对吧?
请参阅如何实现良好的亵渎过滤器?进行广泛的讨论.
您可以使用 RegEx 使事情变得更干净一些:
var bannedWords = @"\b(this|is|the|list|of|banned|words)\b";
foreach(mail in mailList)
var clean = Regex.Replace(mail, bannedWords, "", RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)
但即便如此,也远非完美,因为人们总会找到绕过任何类型过滤器的方法。