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

NumberFormatException while trying to parser string to an int

这是我的代码:

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 存储到二维数组,将 2、9、9 存储到一维数组,我该怎么做呢?

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

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

您可以通过打印拆分 String 数组的 lengthcontent 来简单地调试它。 (注释 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++;
}

你已经做对了所有你需要做的就是在尝试将其解析为 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"

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