小编典典

当我使用扫描仪sc.nextDouble()时,为什么会得到InputInputMismatchException

java

我想从txt文件中读取数据,但是InputMismatchException在调用nextDouble()method
时得到了。即使我正在使用该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();
        }
    }
}

阅读 288

收藏
2020-11-26

共1个答案

小编典典

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

替换1.91,9可修复问题(演示1)。如果您想解析1.9,请使用Locale.US代替Locale.FRENCHdemo
2
)。

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

2020-11-26