代码之家  ›  专栏  ›  技术社区  ›  Chaddeus

在C#中解析字符串中“坏”字的最佳方法是什么?

  •  7
  • Chaddeus  · 技术社区  · 16 年前

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

    但我肯定有更好的办法。

    提前谢谢!

    我不想自动删除淫秽内容。。。对于我的web应用程序,如果使用了我认为“不好”的单词,我希望得到通知。然后我会亲自检查,以确保它是合法的。自动标记系统。

    3 回复  |  直到 15 年前
        1
  •  16
  •   Community Mohan Dere    9 年前

    虽然你的方法可行,但可能有点费时。有一个 wonderful response here 对于前一个问题。虽然这个问题讨论的是PHP而不是C#,但我认为它很容易移植。

    编辑以添加示例代码:

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

    我不想自动删除淫秽内容。。。对于我的web应用程序,如果使用了我认为“不好”的单词,我希望得到通知。

    就像上面的替换部分一样,您可以看到是否有这样的匹配:

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

    它会回来的 true 如果传递给它的字符串包含列表中的任何单词。

        2
  •  4
  •   Detmar    16 年前

    在我的工作中,我们在我们的软件中加入了一些自动的坏词过滤(在浏览源代码时,突然遇到包含几页淫秽内容的数组,这有点令人震惊)。

    • 输入中的所有内容都大写
    • 删除大多数非字母数字(也就是说,只是拼接出任何空格或标点符号等)
    • 然后假设有人试图为字母传递数字,这样做:用O替换0,用G替换9,用S替换5,等等(发挥创意)

        3
  •  1
  •   Alex    16 年前

    你可以考虑使用 HashKey 对象或 Dictionary<T1, T2 &燃气轮机;例如,使用字典代替数组可以提高代码的效率,因为.Contains()方法变成.Keys.Contains(),这样效率更高。如果你有一大堆亵渎的话(不知道有多少!)