【问题标题】:String Censoring字符串审查
【发布时间】:2013-11-07 21:33:43
【问题描述】:

我正试图在游戏中阻止某些单词被聊天。唯一的问题是玩家可以通过添加文字来取消我的审查员。这是一个例子。

    //Check for rude words before sending to server
    List<String> tokens = new ArrayList<String>();
    tokens.add("bilbo");
    tokens.add("baggins");
    tokens.add("in");
    tokens.add("the");
    tokens.add("shire");

    String patternString = "\\b(" + StringUtils.join(tokens, "|") + ")\\b";
    Pattern pattern = Pattern.compile(patternString);
    Matcher findRudeWords = pattern.matcher(result.toLowerCase());

    while (findRudeWords.find()) {
        //Replace the bad word with astericks
        String asterisk = StringUtils.leftPad("", findRudeWords.group(1).length(), '*');
        result = result.replaceAll("(?i)" + findRudeWords.group(1), asterisk);
    }

长期存在的问题是,如果有人说 bilbobaggins,中间没有空格,我的审查员可以很容易地避开。我怎么能做一个不只是检查单词的足够的审查器?

【问题讨论】:

  • 或者他们可以说bag gins,或bag-gins,或bagins,或baagins,或bagg1ns,或者......你明白了。审查文字几乎是一项不可能完成的任务。
  • 这是不可能的。见:stackoverflow.com/a/6099598/922184
  • 我从个人经验中知道这几乎是不可能的。但是,我现在正试图找到一种方法来审查带有 -ing 或诸如此类的粗鲁的话。

标签: java word blacklist


【解决方案1】:

去掉两个单词的边界。两个\b。我不想打扰 StringUtils 所需的额外库,所以我稍微修改了你的代码,但这是我测试过的:

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.*;

class Ideone {
    public static void main(String[] args) throws java.lang.Exception {
        // Check for rude words before sending to server
        String result = "heres bilbobaggins haha";
        String patternString = "(bilbo|baggins|in|the|shire)";
        Pattern pattern = Pattern.compile(patternString);
        Matcher findRudeWords = pattern.matcher(result.toLowerCase());

        while (findRudeWords.find()) {
            // Replace the bad word with asterisks
            result = result.replaceAll("(?i)" + findRudeWords.group(1), "*");
        }
        System.out.println("result=" + result);
    }

}

输出:

result=heres ** haha

你可以在这里玩:http://ideone.com/72SU7X

【讨论】:

    猜你喜欢
    • 2019-12-01
    • 2021-12-23
    • 2020-08-09
    • 2020-11-25
    • 2013-06-24
    • 2016-06-04
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多