繁体   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