我从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

最佳答案

好吧,整数可以表示为Doubles,因此当您要求Scanner查找Doubles时,Scanner.nextInt会选择它们。您必须在扫描整数后手动检查整数值,或者使用nextDouble跳过整数输入,并且仅当(临时)用完整数时才使用hasNextLine()。因此,循环中的条件条件如下所示:

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);
    }
}


虽然说实在的,但是我有点困惑为什么您将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);
    }
}

关于java - 只读 double 不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16500992/

10-11 10:36