为什么我在使用扫描仪 sc.nextDouble() 时得到 InputMismatchException

Why get i InputMismatchException when i use scanner sc.nextDouble()

我想从 txt 文件中读取数据,但是当我调用 nextDouble() 方法时得到 InputMismatchException。尽管我使用了 useLocale 方法,但它不起作用。

txt文件第一行是:1;forname;1.9

public class SimpleFileReader {
    public static void main(String[] args){
        readFromFile();
    }
    public static void readFromFile(){
        try {
            int x = 0;
            File file = new File("read.txt");
            Scanner sc = new Scanner(file).useDelimiter(";|\n");
            sc.useLocale(Locale.FRENCH);
            while (sc.hasNext()){
                System.out.println(sc.nextInt()+" "+sc.next()+" "+sc.nextDouble());
                x++;
            }
            System.out.println("lines: "+x);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

归咎于法语语言环境:它使用逗号作为小数点分隔符,因此 1.9 无法解析。

1.9 替换为 1,9 可解决问题 (demo 1). If you would like to parse 1.9, use Locale.US instead of Locale.FRENCH (demo 2)。

代码中的第二个问题是使用 \n 作为分隔符。您应该使用单个反斜杠,否则包含 n 的单词会破坏您的解析逻辑。