【发布时间】:2023-03-24 15:34:01
【问题描述】:
这是我的第一个问题,听起来可能很愚蠢,但我找不到解决方案。 我正在学习 Java,我正在做一个练习,从互联网上读取一个带有双格式温度的 txt(即 86.60)。
问题是,正确编译后,当我尝试运行它时,出现以下异常:
Exception in thread "main" java.util.InputMismatchException
这是有问题的方法:
public static double[] arrayFromUrl(String url) throws Exception {
Scanner fin = new Scanner((new URL(url)).openStream());
int count = fin.nextInt();
double[] dubs = new double[count];
for ( int i=0; i<dubs.length; i++)
dubs[i] = fin.nextDouble();
fin.close();
return dubs;
}
这是目标文件: https://learnjavathehardway.org/txt/avg-daily-temps-atx.txt
我终于发现这是因为条目的格式,我的 powershell 不接受 xx.xx(点)格式的双精度,但只接受 xx,xx(逗号)。 我认为这是因为我住在意大利,并且我的系统和区域设置是一致的(我们使用逗号表示双打)。如何更改我的 JVM 的语言环境以使其接受 xx.xx 格式的双精度值?
【问题讨论】:
-
在这里发布整个异常并不是使用完整的。如果您希望得到其他人的帮助,请发布它的上下文。
-
对不起,正如我所说,第一个问题 :) 我认为这与我的问题无关,但我仍然编辑了添加方法的帖子,以及它读取的文件的链接。跨度>
-
数据是如何格式化的?如果使用逐行格式,您通常最好使用
BufferedReader并自己解析这些行。此外,请记住将try-with-resources与任何外部资源一起使用。 -
要回答您的实际问题(也许重写您的问题以使其更清楚),您需要 1) 更改 locale of the JVM 或 2) 使用
BufferedReader和正确的NumberFormat语言环境或 3) 设置 locale of theScanner本身。任何使用点小数分隔符的语言环境都可以,例如Locale.UK。 -
温度为双格式(86.6、45.4 等),我通过修改代码暂时解决了这个问题,并让它读取了一个本地文件,在该文件中我将所有点都更改为逗号,但我想想知道是否有办法让 powershell 接受 xx.xx 格式的双精度而不是 xx,xx(我们在意大利使用的)。
标签: java windows powershell java.util.scanner