提问人:Havanna Ransom 提问时间:2/1/2021 最后编辑:TechGeek49Havanna Ransom 更新时间:2/1/2021 访问量:70
如何在 Java 中解析 InputMismatchException
How to resolve InputMismatchException in Java
问:
我正在尝试读取行格式为 和 的文件。.adi
String
Int
Double
例如:
Ford,Fusion,2010,85254,12855.58
对于代码,我需要使用语句,并且方法标头必须抛出异常。此外,我在 try 块中有一个语句来处理数据,但是我一直在被抛出。try-catch
while
InputMismatchException
所以它看起来像:
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.
答:
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
跳到下一行的开头。
评论