Функция сравнения строк не будет работать должным образом

У меня есть функция, которая должна сканировать строку и возвращать true, если строка содержит ругательство и false в противном случае.

public static boolean isBad(String s) {
    //cussWords is a previously defined arraylist containing all possible spellings of all swear words (Loaded from a utf8 encoded file if that matters)
    s = s.replaceAll("[^A-Za-z0-9 ]", "").toLowerCase();
    String[] arr = s.split(" ");
    for (String str : arr) { //Break sentence into words and check each word
        str = str.trim();
        if (cussWords.contains(str)){ //Check if it is bad using ArrayList.contains function
            System.out.printf("\"%s\" contains a bad word.\n",s);
            return true;
        }
        if (badWords[hash(str)] != null) { //Check if it is bad using hash table

            System.out.printf("'%s' contains bad word: %s|%s\n", s, badWords[hash(str)], str);
            return true;
        }
    }
    System.out.printf("'%s' does not contain any bad words.\n", s);
    return false;
}

Когда входы жестко закодированы

System.out.println(cussWords.contains(*swear word*));

или же

System.out.println(isBad(*sentence with swear word*));

выходы правильные, но при работе на сервере с динамическими входами функция всегда возвращает false. Я потратил часы на тестирование каждого компонента для этой функции в отдельности, и каждая часть работает сама по себе, но при объединении они этого не делают. Я не знаю, возможно ли код поврежден или я просто что-то упустил.

Я называю функцию здесь

        if (isCensored) {
        while (Dictionary.isBad(response)) {
            response = db.fetchResponse(db.all.get(r.nextInt(db.all.size()))); //db.all is an arraylist containing all possible responses stored in the database (It's a chat bot)
        }
    }

Вот суть проблемы (в моем коде это не подвергается цензуре)

System.out.println(wordSet.contains("f***")); //Returns true

    for (String str : arr) {
        str = str.trim();
        System.out.println(str.equals("f***")); //Returns true
        if (wordSet.contains(str)){ //Returns false
            System.out.printf("\"%s\" contains a bad word.\n",s);
            return true;
        }
  }

0 ответов

Другие вопросы по тегам