有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    有两种不同的Locale categories,一种用于显示,另一种用于格式。扫描器使用Locale.getDefault(Locale.Category.FORMAT),但如果调用Locale.getDefault(),则会得到要显示的区域设置。setLocale(Locale)方法同时设置这两个参数