Java Scanner究竟是如何解析的?

时间:2013-03-26 17:38:29

标签: java java.util.scanner locale

我使用的是“控制面板\时钟,语言和地区”为“丹麦”的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:

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()方法返回的是什么?

1 个答案:

答案 0 :(得分:5)

有两种不同的Locale categories,一种用于显示,一种用于格式。扫描程序使用Locale.getDefault(Locale.Category.FORMAT),但如果您致电Locale.getDefault(),则会获得显示的区域设置。 setLocale(Locale)方法设置了两者。