扫描文件和匹配字符串Java(寻找更好的方法)

时间:2015-03-30 14:01:06

标签: java if-statement java.util.scanner

我正在创建一个简单的java程序,它扫描一个文件并查找特定的字符串,我在某种程度上工作,但我确信有一个更有效和更好的方法,我正在使用IF包含比较许多不同字符串的方法但是我觉得这是一种不好的练习方式,并且想知道是否有人能让我知道我还能尝试什么?

    while (sc.hasNextLine()) {

          readLine = new Scanner(sc.nextLine());
          x = readLine.nextLine();
          numberOfLines++;  


            if (x.contains("a")) {
                numberOfConsonants++;
            }
            if (x.contains("A")) {
                numberOfConsonants++;
            }
            if (x.contains("e")) {
                numberOfConsonants++;
            }
            if (x.contains("E")) {
                numberOfConsonants++;
            }
            if (x.contains("i")) {
                numberOfConsonants++;
            }
            if (x.contains("I")) {
                numberOfConsonants++;
            }
            if (x.contains("o")) {
                numberOfConsonants++;
            }
            if (x.contains("O")) {
                numberOfConsonants++;
            }
            if (x.contains("u")) {
                numberOfConsonants++;
            }
            if (x.contains("U")) {
                numberOfConsonants++;
            }
}

2 个答案:

答案 0 :(得分:1)

您可以了解正则表达式(例如在oracle教程:https://docs.oracle.com/javase/tutorial/essential/regex/

正则表达式允许您将模式与字符串“匹配”。 并且您可以指定一个匹配“一次拍摄”中所有元音的模式;从而将你级联的if语句折叠成一个。

(我想你的意思是元音,而不是辅音?)

答案 1 :(得分:0)

你可以尝试这样的事情:

Set<String> consonants = new HashSet<>();
consonants.add("a");
consonants.add("e");
consonants.add("i");
consonants.add("o");
consonants.add("u");

while (sc.hasNextLine()) {

          readLine = new Scanner(sc.nextLine());
          x = readLine.nextLine();
          numberOfLines++;  

          if(consonants.contains(x.toLowerCase())) { 
              consonants++;
          }
}

这将允许您放置字母并在稍后阶段匹配它们。集合应该为您提供一种检查项目是否存在的相当快速的方法。

作为旁注,你要匹配元音,而不是辅音(这可能会在你的代码中产生混淆)。