如何在 Java 中解析 InputMismatchException

How to resolve InputMismatchException in Java

提问人:Havanna Ransom 提问时间:2/1/2021 最后编辑:TechGeek49Havanna Ransom 更新时间:2/1/2021 访问量:70

问:

我正在尝试读取行格式为 和 的文件。.adiStringIntDouble

例如:

 Ford,Fusion,2010,85254,12855.58

对于代码,我需要使用语句,并且方法标头必须抛出异常。此外,我在 try 块中有一个语句来处理数据,但是我一直在被抛出。try-catchwhileInputMismatchException

所以它看起来像:

        try{
            Scanner scan = new Scanner(inventoryFile)
            scan.useDelimiter(FIELD_SEPARATOR);
            while(scan.hasNext()) {
                
                String make = scan.next();
                String model = scan.next();
                int year = scan.nextInt();
                int mileage = scan.nextInt();
                double price = scan.nextDouble();
                Automobile auto = new Automobile(make, model, year, mileage, price);
                fileInventory.add(auto);
            }

May I know how to resolve this issue? Thanks in advance.
爪哇岛 java.util.scanner read文件 InputMismatchException

评论

0赞 Jim Garrison 2/1/2021
“I keep getting an InputMismatchException” -- 请编辑您的帖子并添加完整的堆栈跟踪(格式为代码),并指出引发异常的语句。请阅读如何提问,了解如何在 StackOverflow 上编写问题。

答:

2赞 Jim Garrison 2/1/2021 #1

您没有指定,但我认为设置为 .因此,它不是默认的(空格),而是只期望单个逗号来分隔字段。FIELD_SEPARATOR","

第一行以换行符结尾,该换行符不会终止最后一个字段,因此它会等到读取下一行并尝试扫描与第二行连接的第一行中的值和名称。\n

因此,例如,对于此输入

-Ford,Fusion,2010,85254,12855.58
-Chevy,Silverado,2015,66454,17333.00

你的代码实际看到的是

-Ford,Fusion,2010,85254,12855.58\n-Chevy,Silverado,2015,66454,17333.00

而且它只用逗号拆分,所以价格字段包含 ,这显然不是一个有效的数字。12855.58\n-Chevy

我个人讨厌包含在 Java 中,它给初学者带来了难以置信的悲伤,并且是这里许多问题的原因。Scanner

在这种情况下,简单的解决方法是添加一行

double price = scan.nextDouble();
scan.nextLine();  // ADD THIS LINE

跳到下一行的开头。