我想创建坏词过滤器。这是我的示例代码:
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功能不正常。
我想对用户评论做一个不好的单词过滤器。
答案 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;
}