从文件中读取时的java.lang.NumberFormatException

时间:2015-04-22 02:26:32

标签: java numberformatexception

我试图创建一个基本程序,它读取一个矩阵排列的未知数字的文件,创建一个String格式的数组列表来读取它,然后将其解析为int以用于多个其他进程。我在解析时得到java.lang.NumberFormatException,我知道它可能是因为空值被解析为int。我已经查看了其他问题,但似乎无法解决问题。这是代码的一部分:

public static void main(String[] args) {
    try {
            br = new BufferedReader(new FileReader(theFile));
            String line = null;

            while ((line = br.readLine()) != null) {                
                String[] aLine = line.split("/t");
                br.readLine();
                numLine.add(aLine);
            }
        } catch (IOException e){
        } finally {
            try {
                br.close();
            } catch (Exception e) {
            }
        }

    for (int i=0; i < numLine.size(); i++){
        for (int j = 0; j < numLine.get(i).length; j++){
            System.out.print(numLine.get(i)[j] + " ");
            //  if (!((numLine.get(i)[j]).equals("\t"))){
            intList.add(Integer.parseInt(numLine.get(i)[j]));
            //  }
        }
        System.out.println();
    }
}

这就是错误所说的:

Exception in thread "main" java.lang.NumberFormatException: For input string: "6    10  9   10  12  "
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at readingTextFiles.Main.main(Main.java:34)

请考虑到我是一名新手程序员,从研究中得到了所有这些,所以我不确定该理论是如何运作的。

3 个答案:

答案 0 :(得分:2)

更改分隔符为@kayKay提到,您正在尝试再次读取该行。我想你不应该

public static void main(String[] args) {
try {
    br = new BufferedReader(new FileReader(theFile));
    String line = null;

    while ((line = br.readLine()) != null) {
        String[] aLine = line.split("\t"); // Also as kaykay mentioned change /t to \t
        //br.readLine();  // You are reading the line again - Comment it out 
        numLine.add(aLine);
    }
} catch (IOException e){
} finally {
    try {
        br.close();
    } catch (Exception e) {
    }
}

for (int i=0; i < numLine.size(); i++){
    for (int j = 0; j < numLine.get(i).length; j++){
        System.out.print(numLine.get(i)[j] + " ");
        //  if (!((numLine.get(i)[j]).equals("\t"))){
        intList.add(Integer.parseInt(numLine.get(i)[j]));
    }
System.out.println();
}

答案 1 :(得分:1)

该计划的输出是什么?标签字符由\t表示,而不是/tline.split("\\t");)。此外,您需要添加验证检查,您读取的每一行实际上都是Integer

答案 2 :(得分:0)

错误消息表示您尝试解析为类似的整数:

"12abc34d" //<-- bad case - re-consider your approach

或类似的东西:

"   911   " //<-- this can be fixed quickly

,在此处添加trim()

intList.add(Integer.parseInt(numLine.get(i)[j].trim()));