JAVAutil。扫描器Java扫描器到底是如何解析double的?
我使用的是Windows 7机器,其“控制面板\时钟、语言和区域”为“丹麦”
根据Scanner的文件:
A scanner's initial locale is the value returned by the Locale.getDefault() method;
但当我运行代码时:
System.out.println(Locale.getDefault());
Scanner sc = new Scanner("1.0");
sc.nextDouble();
它输出“en_US”,然后抛出一个java。util。sc.nextDouble()处的输入不匹配异常。 当扫描仪初始化为“1,0”时,它工作
但是,如果我显式设置了区域设置:
Locale.setDefault(Locale.US);
System.out.println(Locale.getDefault());
Scanner sc = new Scanner("1.0");
sc.nextDouble();
它输出“en_US”,然后解析double。是我遗漏了什么,还是扫描仪的文档有误
Edit根据@Perception的建议,我查看了第一个示例中的sc.locale()。上面印着“da_DK”。那么,当语言环境返回“en_US”时,为什么它不是“en_US”。getDefault()方法
# 1 楼答案
有两种不同的Locale categories,一种用于显示,另一种用于格式。扫描器使用
Locale.getDefault(Locale.Category.FORMAT)
,但如果调用Locale.getDefault()
,则会得到要显示的区域设置。setLocale(Locale)
方法同时设置这两个参数