Java Scanner.hasNextDouble无法识别“1.0”但是“1,0”

时间:2018-04-04 14:13:36

标签: java

经过漫长而痛苦的调试后,我发现了Scanner的一种奇特行为。初始化扫描仪,输入格式为:

1.0,2.0,5.0,10

就像这样的整数和双打的组合。但是,在运行以下循环时:

scan.useDelimiter("[, ]");
while(scan.hasNext()) {
    if(scan.hasNextDouble()) {
        System.out.println(scan.nextDouble());
    } else {
        System.out.println("Other:"+scan.next());
    }
}

我得到了输出:

Other:1.0
Other:2.0
Other:5.0
10.0

这很奇怪。它将整数解释为双精度(如预期的那样),但无法识别“真正的”双精度。但是,如果我将第一行更改为:

scan.useDelimiter("[. ]");

它返回:

1.0
0.2
0.5
0.1

这意味着Scanner.hasNextDouble将“0,2”识别为双倍但不是“1.0”。这是设计的吗?似乎对我非常违反直觉。很高兴能得到任何帮助。

1 个答案:

答案 0 :(得分:0)

在此链接上找到答案:https://stackoverflow.com/a/40028178/7546831

显然是一个语言环境问题,在某些地区,根据Java,双打被写为“1,0”而不是“1.0”。但是,可以指定您喜欢的内容。你知道的越多!