簡體   English   中英

爪哇| 從文件中查找特定行

[英]Java | Finding specific lines from file

所以我目前正在研究學校的一個項目。 我以這種格式將客戶的數據保存在 .txt 文件中

-----
17-03-2020 15:49
WashType: De Luxe
ID: 1, Name: Janus Pedersen
-----
-----
20-03-2020 13:07
WashType: Standard
ID: 2, Name: Hardy Akira
-----

為了感謝客戶使用此服務,我想在每購買 10 次后給客戶一些電影票。 為此,我想再次閱讀此文件並查找他們的 ID 並進行計數,但我根本無法完成這項工作。 我最初的想法是這樣的,但它一直給我一個空指針

    String[] words;  
    FileReader fr = new FileReader("stats.txt");  
    BufferedReader br = new BufferedReader(fr); 
    String s;
    String input = String.valueOf(washCard.getCardID());   
    int count=0;   
    while((s=br.readLine())!=null)   
    {
        words=s.split(" ");  
        for (String word : words)
        {
            if (word.equals(input))   
            {
                count++;    
                System.out.println(word);
            }
        }
    }

有人對此有什么好主意嗎? 為了讓事情更容易,我已將其全部添加到 github 存儲庫中: https : //github.com/rasm937k/curly-broccoli

您可以為此使用 Java 8 流:

Files.lines(Paths.get("stats.txt"))
        .map(line -> line.split(" "))
        .filter(words -> words[5].equals(washCardId))
        .count();

這里還有一個關於 Java 8 Streams 的不錯的教程: https : //www.baeldung.com/java-8-streams

以下代碼基於Michał Kaciuba 的回答,但經過調整以適合您的stats.txt文件的實際格式。 我不知道如何將其作為評論發布,因此我將其發布為答案,但正如我所說,Michał Kaciuba 應該受到贊揚,我認為您應該接受他的回答。 請注意,代碼的解釋遵循實際代碼。

String input = String.valueOf(washCard.getCardID());
Pattern pttrn = Pattern.compile("^ID: (\\d+)");
Path p = Paths.get("stats.txt");
try {
    long count = Files.lines(p)  //throws java.io.IOException
                      .filter(l -> {Matcher mtchr = pttrn.matcher(l); return mtchr.find() && input.equals(mtchr.group(1));})
                      .count();
    System.out.println(count);
}
catch (IOException x) {
    x.printStackTrace();
}

Files.lines(p)創建一個,其中中的每個元素都是來自文件stats.txt ,即一個String

正則表達式匹配以ID:開頭的行ID:后跟一個空格,后跟一系列一個或多個數字。 數字部分被稱為捕獲組,因為它被括在括號中。

filter()檢查文件中的行是否與正則表達式匹配,如果匹配, filter()然后檢查該行中的“數字”是否與您的input匹配,即String.valueOf(washCard.getCardID())

count()計算filter()返回的流中的所有元素, count()返回long

暫無
暫無

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

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