这是我的代码:
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}
答案 0 :(得分:0)
异常是因为拆分逻辑不正确。您的拆分逻辑生成了三个部分""
,"2"
,"1"
,这就是您获得异常的原因。
您可以通过打印拆分length
数组的content
和String
来简单地进行调试。 (注释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"
如您所见,第一部分是空白的。