用于显式单词的Java搜索字符串

时间:2014-05-21 04:03:28

标签: java string contains

我正在处理一个接受字符串的项目,它会创建一个带有字符串名称的文件,但我希望它禁止某些单词。我该怎么做?

String fname = scanner(System.in);
//check if it contains explicit words
if (fname.contains("THE BAD WORD HERE")) {
    System.out.println(fname + " contains inappropriate words and is not accepted.");
} else {
    System.out.println(fname + " is all good");
    //create file
    createFile(fname);
}

我是否必须使用for循环并浏览每个字符?还是有更简单的方法?请帮忙。

2 个答案:

答案 0 :(得分:1)

你会遍历每个“坏词”并查看字符串是否包含该词。如果是这样,你设置一个标志。

例如:

String[] badWords = new String[5]; 
//set all of you bad words
String fname = scanner(System.in);
//check if it contains explicit words
boolean containsBadWord = false;
for(String badWord : badWords){
    if (fname.contains(badWord)) {
        containsBadWord = true;
        break;
    } 
}
if(containsBadWord){
    System.out.println(fname + " contains inappropriate words and is not accepted.");
}
else {
    System.out.println(fname + " is all good");
    //create file
    createFile(fname);
}

答案 1 :(得分:1)

考虑使用一组不好的词......

这个问题是跟踪每个不恰当的词。一个更简单的解决方案可能是删除所有元音,因为这不需要大量不恰当的单词 - 如果您不小心允许使用法语或其他语言不合适的单词,该怎么办?

无论如何,这是一个基于HashSet的解决方案:

Set<String> badWords = new HashSet<String>();
badWords.add("f*ck");
badWords.add("sh*t");
... etc

当然,您希望执行不区分大小写的比较:

boolean hasBadWord(String filename, Set<String> badWords) {
    String filenameLower = filename.toLowerCase();
    for(String badWord : badWords) {
        if( filenameLower.contains(badWord) ) {
            return true;
        }
    }
    return false;
}

可以在此处找到更多有关集合的内容:java Sets documentation