尝试将字符串解析为int时的NumberFormatException

时间:2015-10-13 15:32:55

标签: java arrays multidimensional-array text-files

这是我的代码:

import java.io.BufferedReader;
import java.io.FileReader;

public class CreateMatrix {
  public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new FileReader("score.txt"));
        String line = null;

        int[][] array = new int[3][2];
        int lineCount = 0;

        while ((line = br.readLine()) != null) {
          String[] parts = line.split("[(),]");
          for (int i = 0; i < parts.length; i++) {
                array[lineCount][i] = Integer.parseInt(parts[i]);
            }
        }
        br.close();
      }
    }

输入:

(2,1)
(9,7)
(9,8)

我收到此错误

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)<br>
    at java.lang.Integer.parseInt(Integer.java:504)<br>
    at java.lang.Integer.parseInt(Integer.java:527)<br>
    at CreateMatrix.main(CreateMatrix.java:15)<br>
谁能告诉我哪个部分做错了?

我修改了代码,现在工作正常:

 import java.io.BufferedReader;
 import java.io.FileReader;

 public class CreateMatrix {
  public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new FileReader("score.txt"));
        String line = null;

        int[][] array = new int[3][2];
        int lineCount = 0;

        while ((line = br.readLine()) != null) {
              line = line.substring(line.indexOf('(')+1, line.lastIndexOf(')'));
              String[] parts = line.split(",");
              for (int i = 0; i<parts.length; i++) {
                array[lineCount][i] = Integer.parseInt(parts[i]);
                //System.out.println("{" + array[lineCount][i] + "}");
              }
              lineCount++;
            }
        br.close();
        System.out.println("{" + array[0][1] + "}");
        System.out.println("{" + array[1][1] + "}");
      }
    }

但如果我想将1,7,8存储到2D阵列和2,9,9到1D阵列,我该怎么办?

val01 [] ={2,9} 
val02 [0][0] = {1}
val02 [1][0] = {7,8}

2 个答案:

答案 0 :(得分:0)

异常是因为拆分逻辑不正确。您的拆分逻辑生成了三个部分"""2""1",这就是您获得异常的原因。

您可以通过打印拆分length数组的contentString来简单地进行调试。 (注释parseInt语句只是为了得到完整的输出。)

首先从输入中删除(),然后简单地按,拆分。

  line = line.substring(line.indexOf('(')+1, line.lastIndexOf(')'));
  String[] parts = line.split(",");

使用上面的代码。替换你的分裂逻辑。

您还应该增加lineCount,否则它只会覆盖第一行中的数据。初始值为零(0),在循环中不会随时更新。

这是正确的while循环:

while ((line = br.readLine()) != null) {
  line = line.substring(line.indexOf('(')+1, line.lastIndexOf(')'));
  String[] parts = line.split(",");
  for (int i = 0; i<parts.length; i++) {
    array[lineCount][i] = Integer.parseInt(parts[i]);
  }
  lineCount++;
}

答案 1 :(得分:0)

你已经把一切都做对了你需要做的就是在尝试将它解析为int之前确保字符串不为null或为空。

for (int i = 0; i < parts.length; i++) {
     // Add these lines 
     if(parts[i]==null || parts[i].trim().isEmpty()) { 
          continue;
     }
     // till here
     array[lineCount][i] = Integer.parseInt(parts[i]);
}

这种情况发生的原因是,当您分开()或(2,1)时,您会得到3个部分。

parts[0] = ""
parts[1] = "2"
parts[2] = "1"

如您所见,第一部分是空白的。