尝试将字符串解析为 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
数组的 length
和 content
来简单地调试它。 (注释 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"
如您所见,第一部分是空白的。
这是我的代码:
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
数组的 length
和 content
来简单地调试它。 (注释 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"
如您所见,第一部分是空白的。