我想的是:
foreach (var word in paragraph.split(' ')) {
if (badWordArray.Contains(word) {
// do something about it
}
}
但我确信有更好的方法。
提前致谢!
更新 我不打算自动删除猥亵...对于我的网络应用程序,如果使用我认为“坏”的单词,我希望收到通知。然后我会自己检查以确保它是合法的。一种自动标记系统。
答案 0 :(得分:16)
虽然您的方式有效,但可能需要花费一些时间。先前的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澄清:
我不打算自动删除猥亵...对于我的网络应用程序,如果使用我认为“不好”的字词,我希望收到通知。
就像上面的替换部分一样,你可以看到是否有类似的东西:
public bool HasBadWords(string inputWords) {
Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)");
return wordFilter.IsMatch(inputWords);
}
如果传递给它的字符串包含列表中的任何单词,它将返回true
。
答案 1 :(得分:4)
在我的工作中,我们对我们的软件进行了一些自动坏词过滤(浏览源代码并突然在包含几页淫秽内容的数组中运行时有点令人震惊)。
一个提示是在对您的列表进行测试之前预处理用户输入,在这种情况下,有人试图偷偷摸摸您。所以通过预处理,我们
然后让一些朋友尝试打破它。这很有趣。
答案 2 :(得分:1)
您可以考虑使用HashKey
个对象或Dictionary<T1, T2
&gt;例如,使用Dictionary而不是数组可以使代码更有效,因为.Contains()方法变得更有效.Keys.Contains()。如果你有大量的亵渎(不确定有多少亵渎!),这一点尤其如此。