文字审查:检查文字的方法

问题描述 投票:0回答:1

我正在审查聊天内容。审查制度有效,但插件会替换该词,即使该词不需要被屏蔽。

例如: 屏蔽“端口”这个词 该插件块如下:Tele****ing

我应该向此方法添加什么检查才能使其正常工作? swearList() 这是 config.yml 的 get 方法

private String returnCorrected(String str) {
    JsonObject jsonObject = (new JsonParser()).parse(str).getAsJsonObject();
    JsonArray element = jsonObject.get("extra").getAsJsonArray();
    for (JsonElement objects : element) {
        if (objects instanceof JsonObject) {
            JsonObject actual = (JsonObject)objects;
            String text = actual.get("text").getAsString();
            for (String badWord : swearList()) {
                if (text.contains(badWord)) {
                    String repeat = StringUtils.repeat("*", badWord.length());
                    text = text.replace(badWord, repeat);
                }
            }
            actual.addProperty("text", text);
        }
    }
    return jsonObject.toString();
}

我尝试通过Listener来做到这一点,但随后我需要完全重写OnEnable。我只想检查一下 private String returnCorrected(String str)

java minecraft spigot
1个回答
0
投票

您可以将独立单词定义为前后仅具有有效分隔符的子字符串。有效的分隔符可以是空格、标点符号等。 使用这种方法,您需要循环遍历每个 badWord 以及该单词的每个实例,以单独检查周围的字符。

String separators = " ,.!?:;\"'`~@#$%^&*()[]{}-+_=<>|/\\";

String paddedText = " " + text + " ";
for (String badWord : swearList()) {
    int length = badWord.length();
    for (int i = paddedText.indexOf(badWord); i > -1; i = paddedText.indexOf(badWord, i+1)) {
        String before = paddedText.substring(i-1,i);
        String after = paddedText.substring(i+length,i+length+1);
        if (separators.contains(before) && separators.contains(after)) {
            String repeat = "*****";
            paddedText = paddedText.substring(0,i) + repeat + paddedText.substring(i+length);
        }
    }
}
text = paddedText.substring(1, paddedText.length()-1);

这不是最干净的,但它可能可以用 StringUtils 缩短。

© www.soinside.com 2019 - 2024. All rights reserved.