簡體   English   中英

行尾的掃描儀錯誤

[英]Scanner error at end of line

我正在從csv文件中讀取。 每一行都是一個對象,該對象的字段在一行上。 每一行的最后一個值恰好是一個雙精度值。 如果我用scan.nextDouble()讀取它,我會得到一個inputMismatchException。 我假設它是因為換行符。 如果我以字符串形式讀取它沒有問題,那么我可以嘗試將其解析為double,但我想知道為什么行的結尾會導致錯誤。

文件本身是120000行,如果我跳過每個的最后一個值,只需調用nextLine()一切正常。 當我嘗試讀取最后一個雙倍時我得到錯誤。 任何幫助都會被貶低。 我昨晚很晚才發布這個問題,但遇到的人太過專注於格式化我的樣本並讓我的代碼滿足一些谷歌代碼要求。 我玩了它,並縮小它以試圖讀取最后一個值作為雙重不起作用。

我用它作為掃描儀:

Scanner scan = new Scanner(new BufferedReader(new FileReader("file.csv")));
scan.useDelimiter(",");

它很好地忽略了逗號,我試圖將換行符也作為分隔符,但它崩潰的可怕。

文件中的3行:

0,0,Sol,-26.7,4.85,G2V,0.656,0.000005,0,0,0,0,0
0.00006,1.089009,,9.1,2.39,F5,0.482,219.740502,0.003449,4.177065,0.00000004,-0.00000554,-0.000002
0.000283,-19.49884,,9.27,5.866,K3V,0.999,45.210918,0.003365,-16.008996,-0.00000007,0.00004213,-0.0000002

第一行具有正確的字段數。 我認為也許這些值太大了以至於無法適應,但我試圖將字符串轉換為double並且剛剛意識到它正試圖將“0 \\ n 0.00006轉換成雙倍。再次,我認為它是換行符未被掃描儀識別為分隔符。

實際上,僅使用逗號分隔符是行不通的。 Scanner通過讀入所有傳入數據來工作,直到下一次出現分隔符。 假設這是你的文件:

ABC,123,24.5
DEF,456,29

現在,當涉及到第三個令牌時,它將需要24.5\\nDEF作為您的下一個令牌。 然后它會嘗試將其解析為double。 當然,這不起作用。

所以,你可以做兩件事之一:

  1. 使用nextLine()讀取,在逗號上拆分行,然后解析每個標記。
  2. 允許分隔符為逗號或行尾:

     scan.useDelimiter(",|\\r?\\n"); 

    這告訴掃描器,如果它看到逗號或行分隔符(可選的\\r是用於windows樣式的行分隔符),那么它就是令牌的結尾。

scan.useDelimiter(",|" + System.getProperty("line separator"));

暫無
暫無

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

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