簡體   English   中英

讀取文本文件時,是否有辦法檢查Java是否已開始讀取文本文件中的新行

[英]Is there a way to check if Java has started reading a new line in a text file when reading in a text file

我正在創建一個程序,該程序讀取大塊數據,我需要將它們分開,我想知道java中是否有一個函數,當Java開始以新行開始讀取時,該函數會通知我如果使用掃描儀讀取我的文本文件,這些文件也將更改為CSV文件。

我嘗試過在網上尋找解決此問題的方法,還閱讀了掃描儀可以執行的功能以及找不到有用的功能

公共課程ScannerReading {

public static void main(String[] args) throws FileNotFoundException {

    File file = new File("C:\\myfile.txt");
    Scanner scanner = new Scanner(file);
    scanner.useDelimiter(",");
    String data = scanner.nextLine();
    data = scanner.nextLine();

    while(scanner.hasNext()){
        if(data.contains("  ")) {
            System.out.println("I have a line lol");
            }
        System.out.print(data+" ");
        }
    scanner.close();
    }

}

我期望第一行的輸出是從第一行中提取的信息

您問題的直接答案是,使用Scanner::next / Scanner::hasNext時,無法找出是否剛剛開始新行。 更一般而言,沒有辦法找出最后一個分隔符是什么。 分隔符將被丟棄。

正如JB Nizet所說的那樣,有很多現有的開源CSV閱讀器庫,因此不需要使用Scanner來實現此功能。 確實, 正確實現CSV讀取並非易事,特別是在需要實現標頭,引號,轉義和/或續行的情況下。 建議使用現有的庫。

但是,如果(反對建議!)您決定直接實現閱讀器,那么更健壯的方法是使用嵌套循環:

  • 外循環使用nextLine讀取完整的行
  • 內循環為每一行創建一個Scanner ,以將其拆分為多個字段。

除此之外,這不涉及引號,轉義,延續行等。真正的問題是CSV語法沒有簡單的上下文無關定界符。

我想我可能可以使用某種計數器來計數[字段]

是的...但是,如果CSV中的某些行缺少字段(例如,由於人為錯誤),則對字段進行計數將無法檢測到。

暫無
暫無

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

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