代码不久前就开始工作了;java.util.InputMismatchException“;
别紧张,我自学成才,对这一切都很陌生。 所以我想写一本通讯录。一切正常,没有错误,没有例外。保存了项目,关掉了笔记本电脑,去吃午饭。返回,尝试运行代码,收到错误 根据例外情况,我知道这与我的扫描仪有关。 突出显示了例外情况代码不久前就开始工作了;java.util.InputMismatchException“;,java,java.util.scanner,inputmismatchexception,Java,Java.util.scanner,Inputmismatchexception,别紧张,我自学成才,对这一切都很陌生。 所以我想写一本通讯录。一切正常,没有错误,没有例外。保存了项目,关掉了笔记本电脑,去吃午饭。返回,尝试运行代码,收到错误 根据例外情况,我知道这与我的扫描仪有关。 突出显示了例外情况 int phone = inFile.nextInt() 问题就在这里。但是我想不出它有什么问题 Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throw
int phone = inFile.nextInt()
问题就在这里。但是我想不出它有什么问题
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)
at test.AddressBook.main(AddressBook.java:255)
代码
在Java中,一些分隔符拆分器使用空/空标记,而其他分隔符拆分器则不使用。 如果您有
| |
或| notInt |
并且运行了scanner.nextInt()
,您将得到一个ImputMissmatchException
Scanner i =
new Scanner("Jeremy|Ronald|Wright|43|||Family Member|06|04|2013|06666-9139\n").useDelimiter("[|\\n]");
while (i.hasNext()) {
for (int j = 0; j < 3; j++) {
System.out.println(i.next());
}
for (int j = 3; j < 6; j++) {
int loc = i.nextInt(); // here i get same exception
// when reading next int after 43
System.out.println(loc);
}
}
将输出:
----扫描仪定界符------------------------------
“杰里米”
“罗纳德”
"433"
""
""
"06"
"04"
"2013"
"06666-9139"
---------------字符串拆分---------------------
“杰里米”
“罗纳德”
"433"
""
""
"06"
"04"
"2013"
"06666-9139"
-------------字符串标记器-----------------------
“杰里米”
“罗纳德”
"433"
"06"
"04"
"2013"
“06666-9139”
逐行读取拆分,解析将有助于避免此类问题
while (inFile.hasNext()) {
String line = inFile.nextLine();
String[] tokens = line.split("\\|");
String fName = tokens[0];
String mName = tokens[1];
String lName = tokens[2];
int phone = Integer.parseInt(tokens[3]);
String relationship = tokens[4];
int day = Integer.parseInt(tokens[5]);
int month = Integer.parseInt(tokens[6]);
int year = Integer.parseInt(tokens[7]);
String street = tokens[8];
String city = tokens[9];
String state = tokens[10];
String zipCode = tokens[11];
}
使用文本文件片段执行此操作对我来说很好。您可以发布示例数据吗?该错误只是意味着它遇到了与您期望的类型不匹配的类型。在本例中,我想象它在期望整数时找到了一个字符串。如果让我猜的话,我会说你的文件看起来像:FirstName
| \n
| \n
u LastName| \n
124;某个意外字符串| \n
u RemainingData…或者一个无法解析为int的电话号码
(比如,一个电话号码,转换成int
,将大于Integer.MAX_VALUE
)我已经发布了示例数据。这让我很困惑,在数据上,电话是int。如果删除main()中的前4条打印语句
,失败前打印的是什么?根据您的示例数据,您应该试试OpenCSV
Jeremy|Ronald|Wright|4331732|Family Member|06|04|2013|Eastlawn|Orange Cove|Texas|06666-9139
Heather|Paula|Perkins|7285248|Friends|04|06|2013|Bashford|Yuba City|New Mexico|99585-6820
Edward|Stephen|Allen|7186971|Family Member|25|06|2013|Reinke|Downey|Arizona|15915-9508
Dorothy|Philip|Robinson|8932173|Business Associate|15|07|2013|Harper|La Verne|Montana|37275-3957
Joan|Harry|Wilson|3859088|Business Associate|01|02|2014|Eastlawn|Antioch|Maryland|85923
Scanner i =
new Scanner("Jeremy|Ronald|Wright|43|||Family Member|06|04|2013|06666-9139\n").useDelimiter("[|\\n]");
while (i.hasNext()) {
for (int j = 0; j < 3; j++) {
System.out.println(i.next());
}
for (int j = 3; j < 6; j++) {
int loc = i.nextInt(); // here i get same exception
// when reading next int after 43
System.out.println(loc);
}
}
System.out.println("------Scanner Delimiter------------------------------");
Scanner i =
new Scanner("Jeremy|Ronald|433|||06|04|2013|06666-9139").useDelimiter("[|]");
while (i.hasNext()) {
System.out.println("\""+i.next()+"\"");
}
System.out.println("---------------String split---------------------");
String[] result = "Jeremy|Ronald|433|||06|04|2013|06666-9139".split("[|]");
for(String s: result)
System.out.println("\""+s+"\"");
System.out.println("-------------String Tokenizer-----------------------");
StringTokenizer st = new StringTokenizer("Jeremy|Ronald|433|||06|04|2013|06666-9139", "|");
while (st.hasMoreTokens()) {
System.out.println("\""+st.nextToken()+"\"");
}
while (inFile.hasNext()) {
String line = inFile.nextLine();
String[] tokens = line.split("\\|");
String fName = tokens[0];
String mName = tokens[1];
String lName = tokens[2];
int phone = Integer.parseInt(tokens[3]);
String relationship = tokens[4];
int day = Integer.parseInt(tokens[5]);
int month = Integer.parseInt(tokens[6]);
int year = Integer.parseInt(tokens[7]);
String street = tokens[8];
String city = tokens[9];
String state = tokens[10];
String zipCode = tokens[11];
}