Java:删除咒骂词

时间:2014-10-03 11:23:54

标签: java string

介意我问一个问题吗?你如何制作一个审查咒骂词的代码?例如 输入一个字符串:Holy Crap! 输出:神圣****! 你是如何在java中使用这种类型的程序的?

3 个答案:

答案 0 :(得分:0)

天真(或强力)解决方案是创建Collection个“禁用”单词,并替换输入字符串中的任何单词。但是,对于包含拼写错误的坏词,这不会对你有所帮助,因此它不是一个完美的解决方案。而且这个解决方案效率不高,因为它会为字典中的每个坏词扫描一次输入String。只有在输入字符串和坏字数很少时才应使用它。

String input = "....";
for (word : badWords) {
    input = input.replace(word,"****"); // which can be improved to return a
                                        // number of `*` matching that length of
                                        // the bad word it replaces.
}

有更有效(和复杂)的方法来搜索坏词。例如,您可以将所有坏词存储在树中,然后,对于输入String中的每个单词,遍历树以查看该单词是否与任何坏单词匹配。这将允许您只扫描输入字符串一次,而不是一次扫描字典中的每个坏字。

让我们说你的坏词是“酒吧”,“吠叫”,“吟游诗人”和“坐”。你的树看起来像这样:

          ROOT
          /  \
         b    s
        /      \
       a        i
      /          \
     r            t
    /\
   k  d

这是一个非常小的例子,如果你有很多坏词或输入文字很大,那么实现这样的东西才有意义。

现在,这里有一些你可以做的伪代码:

String[] inputs = input.split(" ");
for (String word : inputs) {
    Node curr = ROOT; // begin at the root of the tree
    boolean isBad = true;
    for (int i = 0; i < word.length; i++) {
        char c = word.charAt(i);
        if (the curr node of the tree has a child whose char = c)
            curr = that child node;
        else {
            isBad = false;
            break; // current word is ok
        }
    }
    if (isBad)
      // replace the bad word that was just found
}

这只是一个部分示例,并未涵盖所有情况。

答案 1 :(得分:0)

您可以在服务器端(可能在属性文件中)维护所有此类单词的注册表,并针对此注册表测试所需的输入字段。如果输入的单词是注册表中维护的单词之一,请替换为*

答案 2 :(得分:0)

您需要查看Java.lang.String.replace()方法。

然后你学习REGEX