Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试将字符串解析为int时出现NumberFormatException_Java_Arrays_Multidimensional Array_Text Files - Fatal编程技术网

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

Java 尝试将字符串解析为int时出现NumberFormatException,java,arrays,multidimensional-array,text-files,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 lin

这是我的代码:

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();
      }
    }
我得到了这个错误

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>

例外情况是因为拆分逻辑不正确。您的拆分逻辑正在生成三个部分,
“2”
“1”
,这就是您得到异常的原因

您只需通过打印拆分的
字符串
数组的
长度
内容
即可对此进行调试。(注释
parseInt
语句以获得完整的输出。)


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

  line = line.substring(line.indexOf('(')+1, line.lastIndexOf(')'));
  String[] parts = line.split(",");
使用上述代码。要替换拆分逻辑,请执行以下操作

您还应该增加
行数
,否则它只会覆盖第一行中的数据。初始值为零(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++;
}
while((line=br.readLine())!=null){
line=line.substring(line.indexOf('(')+1,line.lastIndexOf(')));
String[]parts=line.split(“,”);

对于(inti=0;i您已经做好了一切,您需要做的是确保字符串在尝试将其解析为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]);
}

正如您看到的,第一部分是空的。

在检索完部分后打印出部分[]。您可能有一些空字符串。例如,在输入(123)时,您可能会得到“,”123“,”。跳过它们。加载时有一个空的空格,如果(!parts[i].equals(“”))数组[line…您的数组中有空元素,而不是向下的投票者,但我认为OP已经在()而且,无需替换!另外,错误是因为字符串为空。因为运算逻辑在开始处获得了额外的空间。当行被
)拆分时。感谢您的帮助help@YoungHobbit.你能再帮我一次忙吗?我把细节写在上面了长度是3而不是4。是的,我已经印好了。
  line = line.substring(line.indexOf('(')+1, line.lastIndexOf(')'));
  String[] parts = line.split(",");
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++;
}
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]);
}
parts[0] = ""
parts[1] = "2"
parts[2] = "1"