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"