只阅读双打不起作用

时间:2013-05-11 19:34:35

标签: java double

我在从txt文件中读取双值时遇到问题。我的程序只将int转换为double,但我想忽略它们。

示例文件:

1 2 3 4.5
5 6 7 8.1
9 10 11 12.7

这是我的代码:

File file = new File("file.txt");

    try{
        Scanner scanner = new Scanner(file);
        scanner.useLocale(Locale.US);
        while (scanner.hasNextLine()){
            if (scanner.hasNext() && scanner.hasNextDouble()){
                double value = scanner.nextDouble();
                System.out.println(value);
            }
        }
    }catch(FileNotFoundException e){}

我的输出是:

1.0
2.0
3.0
4.5
5.0
6.0
7.0
8.1
9.0
10.0
11.0
12.7

3 个答案:

答案 0 :(得分:7)

嗯,整数可以表示为双打,所以Scanner会在你要求它找到双打时将它们拿起来。您必须在扫描后手动检查Integer值,否则使用Scanner.nextInt跳过整数输入,并在(暂时)用完整数时仅使用nextDouble。所以你的循环中的条件看起来像这样:

if (scanner.hasNext()) {
    if (scanner.hasNextInt()) {
        scanner.nextInt(); // Ignore this value since it's an Integer
    } else if (scanner.hasNextDouble()){
        double value = scanner.nextDouble();
        System.out.println(value);
    }
}

虽然说实话,我有点困惑为什么你使用hasNextLine()作为while循环的条件,因为这需要你单独检查hasNext() ,就像你现在做的那样。为什么不这样做?

while (scanner.hasNext()) { // Loop over all tokens in the Scanner.
    if (scanner.hasNextInt()) {
        scanner.nextInt(); // Ignore this value since it's an Integer
    } else if (scanner.hasNextDouble()){
        double value = scanner.nextDouble();
        System.out.println(value);
    }
}

答案 1 :(得分:2)

那么检查它是否有一个整数作为下一个标记,.hasNextInt().

答案 2 :(得分:0)

试试这个......

if (scanner.hasNext()) {
        double value = scanner.nextDouble(); // Ignore this value since it's an Integer
        if (!value.toString().endsWith(".0"))
             System.out.println(value);
    }
}

如果你没有使用标准数字,它会破裂,但我不知道任何不是的地方。你的错误的原因是java隐式地将int转换为double。