5

我正在使用“控制面板\时钟、语言和区域”为“丹麦”的 Windows 7 机器

根据Scanner的文档:

扫描仪的初始语言环境是 Locale.getDefault() 方法返回的值;

但是当我运行代码时:

System.out.println(Locale.getDefault());
Scanner sc = new Scanner("1.0");
sc.nextDouble();

它输出“en_US”,然后在 sc.nextDouble() 处抛出 java.util.InputMismatchException。它在扫描仪初始化为“1,0”时工作

但是,如果我明确设置语言环境:

Locale.setDefault(Locale.US);
System.out.println(Locale.getDefault());
Scanner sc = new Scanner("1.0");
sc.nextDouble();

它输出“en_US”,然后解析双精度就好了。我是否遗漏了什么,或者扫描仪的文档有误?

编辑按照@Perception 的建议,我在第一个示例中查看了 sc.locale() 。它打印“da_DK”。那么为什么不是“en_US”,而这是 Locale.getDefault() 方法返回的内容呢?

4

1 回答 1

5

有两种不同的Locale 类别,一种用于显示,一种用于格式。扫描仪使用Locale.getDefault(Locale.Category.FORMAT),但如果你打电话Locale.getDefault(),你会得到显示的语言环境。该setLocale(Locale)方法设置两者。

于 2013-03-26T18:44:30.403 回答