java - 如何更改 JVM 的语言环境?

标签 java windows powershell java.util.scanner

这是我的第一个问题,听起来可能很愚蠢,但我找不到解决方案。 我正在学习 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/

相关文章:

java - 无法从另一个 jFrame 获取值

c - 在 Windows 中用 C 守护进程

powershell - 使用Powershell为按日期创建的文件创建7z存档

powershell - 如何解决 Get-NetConnectionProfile : Provider load failure on x86 Powershell?

java - 无法使用 SPNEGO Java GSS 机制编译安全身份验证

java - Vagrant Java 1.6 到 1.8

c++ - comsupp(w).lib 在哪里?

windows - Windows 7 登录屏幕中是否有本地机器名称的别名?

powershell - 八达通输出变量和值

java - 子类的构造函数中的堆栈溢出错误