如何从字符串中删除指定的单词

5

这里有一个被禁用的单词列表(或更普遍地说,是字符串列表),还有一个包含用户邮件的列表。我想从所有邮件中删除所有被禁用的单词。

以下是一个简单的例子:

foreach(string word in wordsList)
{
   foreach(string mail in mailList)
   {
      mail.Replace(word,String.Empty);
   }
}

我该如何改进这个算法?


谢谢您的建议。我已经投票支持了一些答案,但由于更像是讨论而不是解决方案,所以没有标记任何一个答案为最佳答案。有些人会错过被禁用的词语,使用不当的词语。但在我的情况下,我不必担心识别“sh1t”或类似的词语。


10
你是否在使用中遇到了性能问题?不要过早进行优化,直到必要的时候再考虑。 - Oded
1
我没有性能问题。我只想学习并提高我的技能 :-) - zgorawski
12个回答

0

我假设您只想检测完整的单词(由非字母字符分隔)并忽略带有过滤词子字符串的单词(例如p[ass]word示例)。在这种情况下,您应该构建一个过滤词的HashSet,扫描文本以获取单词,并对每个单词检查其在HashSet中的存在。如果它是一个过滤词,那么就构建一个结果StringBuilder对象而不包含它(或者用相等数量的星号代替它)。


0

我在codeproject.com上使用这个算法取得了很好的结果,比暴力文本替换更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接