java默认Locale是en_US,它使用 ","作为十进制数

标签 java file-io io

我有这个例子:

    System.out.println(Locale.getDefault());
    int count = 0;
    double sum = 0.0;
    FileWriter fout = new FileWriter("test.txt");
    fout.write("2 3,4 5 6 7,4 9,1 10,5 done");
    fout.close();
    FileReader fin = new FileReader("test.txt");
    Scanner src = new Scanner(fin);
    // Read and sum numbers.
    while (src.hasNext()) {
        if (src.hasNextDouble()) {
            sum += src.nextDouble();
            count++;
        } else {
            String str = src.next();
            if (str.equals("done"))
                break;
            else {
                System.out.println("File format error.");
            }
        }
    }
    src.close();
    System.out.println("Average is " + sum / count);

输出是: en_US 平均分 6.2 我的问题是为什么java使用“,”而不是“。”对于十进制数字,我在 Eng Windows 上?因为当我使用这条线时

fout.write("2 3.4 5 6 7.4 9.1 10.5 done");

我得到 4:文件格式错误。这意味着 java 使用“,”而不是“。”

最佳答案

问题是 Scanner 可以有自己的区域设置,在您的情况下,它似乎与 Locale.getDefault() 返回的 JVM 默认区域设置不同.

要查看您的扫描仪使用的区域设置,您可以调用src.locale()

要设置区域设置,您可以使用src.useLocale(Locale.US);

尝试此代码并查看它打印的内容:

public static void main(String[] args) throws Exception {

        System.out.println("Default locale: " + Locale.getDefault());
        int count = 0;
        double sum = 0.0;
        FileWriter fout = new FileWriter("test.txt");

        // Character used for the decimal point is '.'
        fout.write("2 3.4 5 6 7.4 9.1 10.5 done");
        fout.close();
        FileReader fin = new FileReader("test.txt");
        Scanner src = new Scanner(fin);

        // Setting locale of Scanner
        System.out.println("Scanner locale before resetting to Locale.US: " + src.locale());
        src.useLocale(Locale.US);
        System.out.println("Scanner locale after resetting: " + src.locale());

        // Read and sum numbers.
        while (src.hasNext()) {
            if (src.hasNextDouble()) {
                sum += src.nextDouble();
                count++;
            } else {
                String str = src.next();
                if (str.equals("done"))
                    break;
                else {
                    System.out.println("File format error.");
                }
            }
        }
        src.close();
        System.out.println("Average is " + sum / count);

    }

关于java默认Locale是en_US,它使用 ","作为十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29674642/

相关文章:

file-io - 在 Rust 1.x 中读写文件的实际方式是什么?

Python:文件不读取整个文件,io.FileIO 读取 - 为什么?

java - 如何使用模式向后吐出整数

客户端Java加密,服务器解密,使用PBKDF2WithHmacSHA1和AES/CBC/PKCS5Padding

java - 什么是原始类型,为什么我们不应该使用它?

java - Selenium2 中的 FirefoxDriver 是否有经过验证的 mouseOver 解决方法?

c - 追加 "a+"是否自动将光标置于末尾

java - 读写文件 - Java 空空间

c - 读取为未缓存的直接 I/O 打开的文件的最后一个 block 不会产生 EOF,正常行为?

python - 如何将没有换行符的大(3-4GB)文件读入 numpy 数组?