【问题标题】:Java Search String for explicit words显式单词的 Java 搜索字符串
【发布时间】:2014-05-21 04:03:28
【问题描述】:

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

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 循环并遍历每个字符吗?还是有更简单的方法?请帮忙。

【问题讨论】:

  • java没有方法contians。我希望你的意思是contains
  • 对不起,我的意思是contains..

标签: java string contains


【解决方案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);
}

【讨论】:

    【解决方案2】:

    考虑使用一组坏词...

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

    无论如何,这是一个基于 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

    【讨论】:

      猜你喜欢
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 2011-12-27
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多