2

如果我执行以下代码:

import java.util.Scanner;

public class ScannerTest {

    public static void main(String[] args) {

        Scanner s = null;
        StringBuilder builder = new StringBuilder(64);
        String line = "1.1 2.2 3.3";
        float fsum = 0.0f;      

        s = new Scanner(line).useDelimiter(" ");

        while (s.hasNextFloat()){
            float f = s.nextFloat();
            fsum += f;
            builder.append(f).append(" ");
        }
        System.out.println("Floats found: " + builder);
        System.out.println("Sum: " + fsum);
        s.close();
    }
}

我的输出是:

Floats found: 
Sum: 0.0

但是,如果我将点替换为 line 中的逗号"1,1 2,2 3,3",那么它确实可以识别浮点数:

Floats found: 1.1 2.2 3.3 
Sum: 6.6000004

我想这是因为我的 SO 是西班牙语,我们使用逗号而不是带十进制数字的点。我想过使用 Locale,但没有 Locale.SPANISH。

此外,当我运行它时,它的行为正好相反:

public class StringToFloatTest {

    public static void main(String[] args) {
        String st = "1,1";
        float f = Float.parseFloat(st);
        System.out.println(f);
    }
}

此代码生成NumberFormatException,但如果我使用String st = "1.1".

有人可以解释为什么会发生这种情况,我怎样才能让扫描仪识别带有点的浮点数?

4

2 回答 2

5

有人可以解释为什么会发生这种情况

正如您所说,它使用您的默认语言环境。打印Locale.getDefault()以检查您的默认语言环境是什么。

请注意,这不是Float.parseFloat特定于语言环境的。

以及如何让扫描仪识别带有点的浮点数?

称呼s.useLocale(Locale.US);

于 2013-09-25T09:47:08.903 回答
0

Java 默认语言环境选择过程在Java 7 默认语言环境中进行了描述。

下面是如何在不更改许多地方的源代码的情况下从外部更改它: 如何为我的 JVM 设置默认语言环境?

于 2016-11-22T15:48:58.337 回答