小编典典

Java Scanner到底如何解析两倍?

java

我正在使用Windows 7计算机,其“控制面板\时钟,语言和区域”为“丹麦”

根据扫描仪的文档:

扫描程序的初始语言环境是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”。那么,为什么Locale.getDefault()方法返回的结果不是“ en_US”?


阅读 218

收藏
2020-11-19

共1个答案

小编典典

有两种不同的区域设置类别,一种用于显示,另一种用于格式。扫描程序使用,Locale.getDefault(Locale.Category.FORMAT)但是如果您致电,Locale.getDefault()您将获得要显示的语言环境。该setLocale(Locale)方法将两者都设置。

2020-11-19