从java中的文本文件中读取double

时间:2013-02-19 18:32:24

标签: java load double

有人可以向我解释为什么我在我尝试读取双倍的行中得到错误'InputMismatchException'?谢谢!

        int num=inFile.nextInt();
        for(int i=0;i<num;i++){
            String inName=inFile.next();
            double inPrice=inFile.nextDouble();           // <<<this line
            Book bookInFile = new Book(inName, inPrice);
            books.add(bookInFile);
        }

文本文件中的数据:

4
War and Peace
12.99
Green Eggs and Ham
3.99
Harry Potter
5.99
james
5.0

3 个答案:

答案 0 :(得分:1)

尝试这种方法它将解决您的问题。

double d ;
        BufferedReader reader;
        try{
            reader = new BufferedReader(new FileReader("yourTextFile.txt"));
            String line= reader.readLine();       
            while(line !=null){
                try{
                    System.out.println(Integer.parseInt(line)+" is an Integer.");
                }catch(NumberFormatException e){
                try{
                    d=Double.valueOf(line);
                    System.out.println(d+" is a double.");

                }catch(NumberFormatException ex){
                    System.out.println("Not Double ' "+line+" '");
                }
                }
                line=reader.readLine();
            }

        }catch(Exception ex){
            System.out.println(ex.getMessage());
        } 

答案 1 :(得分:0)

要知道为什么你会遇到这个例外,你可以做一些R&amp; D.Like, 使用next()而不是nextDouble(),看看你得到了什么。 如果编译器请求double,则使用nextDouble。还有一件事,当收到的令牌与模式不匹配时会发生这种异常。例如,它必须在获得双倍后获得非双重令牌,可能是获得下一行或回车

答案 2 :(得分:0)

这里的问题是Scanner默认使用whitespace作为分隔符,所以你实际得到的是:

War
and
Peace
12.99
Green
Eggs
and
Ham

当达到nextDouble行时,显然无法将and转换为双倍。

将分隔符更改为换行符,您的代码应该有效:

     Scanner sc = new Scanner(file);
     sc.useDelimiter("\n");