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