Java - 扫描程序无法识别文件

时间:2018-04-07 21:34:46

标签: java eclipse constructor double java.util.scanner

我正在尝试将标签分隔文件中的值保存到类中。我的问题是我的扫描仪不会将最后一个令牌识别为双倍。

我的档案:

    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是我存储文件信息的Country类型的LinkedList。 Country保存名称(String),population(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)

1 个答案:

答案 0 :(得分:0)

我认为问题不在您的代码中,而在您的输入文件中 您的输入文件看起来每个新行都以制表符开头,并以换行符结尾(不可见)。这里的问题是你的最后一个(双)值之后的下一个字符不是制表符而是换行符(换行符) 简单地说,Scanner尝试在每个分隔符之间提取值 - 在您的情况下在选项卡之间。但是当Scanner尝试读取行中的最后一个值时,第一行(例如)中最后一个值的结果值将如下所示:0.46EOL *,这显然不是一个double值,结果为InputMismatchException

解决问题的最简单方法是删除每一行的前导标签,并在一行标签的每个最后一个值后附加。
例如,第一行应如下所示:Saint Lucia TAB 179667 TAB 0.46 TAB(将TAB替换为实际标签)。

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