Android Java坏词过滤器

时间:2018-08-03 17:48:36

标签: java android arrays string filter

我想创建坏词过滤器。这是我的示例代码:

String name = "jack white";   // **NOT WORK** 
String name = "white";  // **WORK**
String lowername = name.toLowerCase();
String[] banned = { "name", "hello", "white"};

if (Arrays.asList(banned).contains(lowername)) {
true;
}

如果名称白色功能正常,但名称插孔白色,xxx白色或白色xxx功能不正常。

我想对用户评论做一个不好的单词过滤器。

3 个答案:

答案 0 :(得分:1)

尝试一下。

static String string1 = "jack smith ran across the street";
static String string2 = "smith jumped";

public static boolean compareStrings(String one, String two){
    boolean helper = false;

    String[] string = one.split(" ");
    for (int i = 0; i < string.length; i++) {
        if (two.contains(string[i])) {
            helper = true;
            System.out.println(string[i]);
        }
    }

    return helper;

}

然后使用它...

System.out.println(compareStrings(string1, string2));

这将打印出来...

smith
true

答案 1 :(得分:1)

您还需要将输入的名称分解为单个单词,并对照禁止的单词检查每个单词: (旁注:使用集合而不是数组会大大提高性能)

Set<String> banned = new HashSet<>(Arrays.asList("name", "hello", "white"));

boolean shouldBeBanned = 
    Arrays.stream(name.split("\\s")).map(String::toLowerCase).anyMatch(banned::contains);

编辑:
当然,即使没有API级别24,也可以实现相同的行为,尽管它不会那么优雅:

boolean shouldBeBanned = false;
for (String word : name.split("\\s")) {
    if (banned.contains(word.toLowerCase()) {
        shouldBeBanned = true;
        break;
    }
}

答案 2 :(得分:0)

实际上您在做错Arrays.asList(banned).contains(lowername)。请看一下以了解list.contains

我已按如下所示修改了您的代码以使其正常工作。

    String name = "jack white"; // **NOT WORK** 
    //String name = "white";  // **WORK**
    String lowername = name.toLowerCase();
    String[] banned = {"name", "hello", "white"};
    List<String> data = Arrays.asList(banned);
    boolean status = hasBannedWords(data,lowername);
    Log.d("TAG",""+status);

使用单独的方法来检查单词。

private boolean hasBannedWords(List<String> data, String sentence) {
    for(String item: data) {
        if(sentence.contains(item)) {
            return true;
        }
    }
    return false;
}