这是我的第一个问题,听起来可能很愚蠢,但我找不到解决方案。 我正在学习 Java,我正在做一个练习,从互联网上读取一个文本,其中包含 double 格式的温度(即 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(点)格式的 double ,而只接受xx,xx(逗号)格式的 double 。 我认为这是因为我住在意大利,并且我的系统和区域设置是一致的(我们使用逗号表示 double )。如何更改 JVM 的区域设置以使其接受 xx.xx 格式的 double ?
最佳答案
要实现此目的,您必须告诉 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
关于java - 如何更改 JVM 的语言环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35100844/