Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以使为on-topic

6年前关闭。



Improve this question





我在Java中放在一起一个基本的亵渎过滤器,以检测用户输入上的亵渎行为。我并没有尝试处理所有可能的情况,这些情况我知道仅使用计算机可能无法解决。但是,我确实想处理一些计算机应该适合处理的基本方案。在这种特殊情况下,我试图检测用户试图通过使用字母之间的空格来破坏过滤器。例如:“您好,我在这里使用了一个小字”。 (蓝精灵在这里是“坏”字)。

在当前的实现中,我保留了一些单词列表,这些单词将根据以下内容检查输入文本:

public boolean containsBadWords (String text) {

    for (String word : badWords) {
        if (text.matches (".*\\b" + word  +"\\b.*")) {
            return (true);
        }
    }

    return (false);
}


但这不能解决我上面描述的间隔字母问题。

有人知道如何使用Java折叠这些单词,以便我可以使用基本的文本匹配算法对其进行处理吗?

最佳答案

准备一个禁止的单词列表,遍历单词,将单词转换为正则表达式,例如“ smurf”->“ s * m * u * r * f *”

String regex = " " + word.replaceAll("(.)", "$1 *") + " ";


并尝试在文本中找到它

boolean found = Pattern.compile(regex).matcher(text).find();

10-04 13:59
查看更多