簡體   English   中英

掃描文件並匹配Java字符串(尋找更好的方法)

[英]Scanning a file and matching strings Java ( Looking for a better way )

我正在創建一個簡單的java程序,該程序可以掃描文件並查找特定的字符串,在某種程度上可以正常工作,但是我敢肯定有一種更有效,更好的方法,我使用的是IF contains方法比較許多不同的字符串,但是我覺得這是一種不好的練習方式,想知道是否有人可以給我一個我還能嘗試什么的想法?

    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++;
            }
}

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

正則表達式使您可以將模式與字符串“匹配”。 您可以指定一個模式,使其與“一次拍攝”中的所有元音匹配; 從而將您的if語句級聯折疊為一個。

(我猜你是說元音,不是輔音?)

您可以嘗試如下操作:

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++;
          }
}

這樣,您就可以放置字母並在以后進行匹配。 集合應該為您提供一種相當快捷的檢查項目是否存在的方法。

附帶說明一下,您正在匹配元音,而不是輔音(這可能會在您的代碼中造成混亂)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM