这是我的第一个问题,可能听起来很愚蠢,但我无法找到解决方案。 我正在学习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格式的双倍?
答案 0 :(得分:1)
要使其工作,您必须告诉Scanner对象在决定如何解析数字时忽略用户的语言环境。
public static double[] arrayFromUrl(String url) throws Exception {
Scanner fin = new Scanner((new URL(url)).openStream());
fin.useLocale(Locale.US);
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;
}
还可以通过向java命令行添加以下标志来更改整个JVM的系统区域设置:
java -Duser.language=en -Duser.region=US MyClass
答案 1 :(得分:0)
在阅读之前,使用Scanner
方法在useLocale()
对象上设置区域设置。 E.g。
fin.useLocale(Locale.US);
强大的代码和数据不应完全依赖于您遇到的原因而依赖于系统默认语言环境。