我已尝试过此代码段,但无法找出导致此异常的原因。
我的代码是: -
import java.util.*;
class ScannerTest
{
public static void main(String[]args)
{
String csv = "Sue,5,true,3";
Scanner sc = new Scanner(csv);
sc.useDelimiter(",");
int age = sc.nextInt();
System.out.println(age);
}
}
输出是: -
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
我是java的新手,所以请帮助我知道这个例外的原因。
答案 0 :(得分:4)
在javadoc示例中,您可以看到它是如何工作的:
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
你的第一个令牌是一个字符串。如果你使用next int,它需要一个整数。 你可能想要使用这样的东西(在你知道csv的结构并且它没有改变的条件下):
public static void main(String[]args)
{
String csv = "Sue,5,true,3";
Scanner sc = new Scanner(csv);
sc.useDelimiter(",");
sc.next();
int age = sc.nextInt();
System.out.println(age);
}
或
public static void main(String[] args) {
String csv = "Sue,5,true,3";
String ageString = csv.split(",")[1];
System.out.println(ageString);
}
...
将字符串解析为int:
int age = Integer.parseInt(ageString);
答案 1 :(得分:3)
扫描程序的Javadoc of the nextInt方法说明
将输入的下一个标记扫描为int。这个方法会抛出 InputMismatchException如果下一个标记无法转换为 有效的int值如下所述。如果翻译成功, 扫描仪超过匹配的输入。
由于你的第一个令牌是一个字符串,这就是正在发生的事情。与CSV中的大多数情况一样,您将知道将要呈现的内容,您应该逐一阅读它们,和/或使用hasNextInt方法及其朋友来检查您的期望是否实际存在。
答案 2 :(得分:1)
扫描程序需要一个整数类型,但第一个标记是一个字符串 - "Sue"
,要修复,放置:
sc.next(); // skip "Sue"
在调用nextInt()之前使用String标记。