该Java类用于从日志文件读取数据并将值插入Array列表中,可以将数据从int更改为任何其他类型, 在某些情况下运行类时,出现此异常错误...
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 GetStaisticResults.readfile(GetStaisticResults.java:33)
at GetStaisticResults.main(GetStaisticResults.java:15)
在插入数组列表之前,我试图以不同的方式强制转换值,但没有结果,有帮助吗?
import java.io.*;
import java.util.*;
import org.apache.log4j.Logger;
public class GetStaisticResults {
public static void main(String[] args) throws Throwable {
String inputFile = ("C:\\staticalData.log");
ArrayList<Integer> Data = new ArrayList<Integer>();
Data = readfile(inputFile);//line 15
}
public static ArrayList<Integer> readfile(String file) throws IOException {
Scanner s = new Scanner(new File(file));
ArrayList<Integer> list = new ArrayList<Integer>();
while (s.hasNext()) {
list.add(s.nextInt()); //line 33
}
s.close();
return list;
}
}
答案 0 :(得分:0)
此代码的问题似乎是您的输入不是基于Integer
的。 s.hasNext()
检查是否可以强制转换为String
的输入。您可能应该在这里使用s.hasNextInt()
。或者,您可以将s.nextInt()
更改为s.next()
,它将把输入作为String
。我提供了两种可能的解决方案,然后您可以决定哪种解决方案可以满足您的要求。
解决方案1:
ArrayList<Integer> list = new ArrayList<>();
while (s.hasNextInt()) {
list.add(s.nextInt());
}
在此解决方案中,您的代码仅将Integer
作为输入。因为s.hasNextInt()
将输入限制为Integer
值。如果它遇到Integer
值以外的任何值,则while
循环将退出。
解决方案2:
ArrayList<String> list = new ArrayList<>();
while (s.hasNext()) {
list.add(s.next());
}
在此解决方案中,您的代码将以String
作为输入。无论您的输入包含"abc"
还是7
或33.32
等,它都不会失败。它将全部保存为String
值。
答案 1 :(得分:0)
所以问题是,无论何时您从文件中读取任何内容,其格式均为string
在下一个内部循环中,当输入是字符串时,您将获取整数值,这就是为什么它给出InputMismatchException