Java异常错误(线程“ main”中的异常java.util.InputMismatchException)

时间:2019-10-14 09:20:53

标签: java

该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;
    }
}

2 个答案:

答案 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"还是733.32等,它都不会失败。它将全部保存为String值。

答案 1 :(得分:0)

所以问题是,无论何时您从文件中读取任何内容,其格式均为string 在下一个内部循环中,当输入是字符串时,您将获取整数值,这就是为什么它给出InputMismatchException