簡體   English   中英

Java-掃描程序無法識別文件中的雙精度值

[英]Java - Scanner won't recognize double value from file

我正在嘗試將制表符分隔文件中的值保存到類中。 我的問題是我的掃描儀無法將最后一個令牌識別為雙精度。

我的檔案:

    Saint Lucia 179667  0.46
    Bosnia & Herzegovina    3503554 -0.10
    Tajikistan  9107211 2.08

引發錯誤的代碼:

    while (fiSc.hasNextLine()) {
        temp.add(new Country(fiSc));
    }

國家(地區)類的構造函數:

    public Country(Scanner fiSc) {
        name = fiSc.next();
        pop = fiSc.nextInt();
        rate = fiSc.nextDouble();
    }

Temp是存儲文件信息的國家(地區)類型的LinkedList。 國家(Country)擁有名稱(String),人口(int)和增長率(double)。 我嘗試通過首先創建對象並在添加對象之后構造Country類,但是,我能夠將問題精確定位到最后一個標記。

當我嘗試此代碼時:

        while (fiSc.hasNextLine()) {
            System.out.println(fiSc.next());
            System.out.println(fiSc.nextInt());
            System.out.println(fiSc.nextDouble());
        } 

我得到:

    Saint Lucia
    179667
    Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextDouble(Unknown Source)
    at MyMain.fillList(MyMain.java:61)
    at MyMain.main(MyMain.java:11)

我認為問題不在您的代碼中,而在您的輸入文件中。
您的輸入文件看起來每一行都以制表符開頭,以換行符結尾(不可見)。 這里的問題是,上一個(雙精度)值之后的下一個字符不是制表符,而是換行符(換行符)。
簡而言之, Scanner嘗試提取每個定界符之間的值-在您的情況下為制表符之間。 但是,當Scanner嘗試讀取該行中的最后一個值時,第一行中最后一個值的結果值(例如)如下所示: 0.46EOL *,這顯然不是雙0.46EOL值,並導致InputMismatchException

解決該問題的最簡單解決方案是刪除每行的前導制表符,並在行的每個最后值之后附加一個制表符。
例如,第一行應如下所示: Saint Lucia TAB 179667 TAB 0.46 TAB (用實際選項卡代替TAB )。

* EOL換行符或“行尾”字符。 有關Wikipedia的更多信息。

暫無
暫無

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

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