我试图创建一个基本程序,它读取一个矩阵排列的未知数字的文件,创建一个String格式的数组列表来读取它,然后将其解析为int以用于多个其他进程。我在解析时得到java.lang.NumberFormatException
,我知道它可能是因为空值被解析为int。我已经查看了其他问题,但似乎无法解决问题。这是代码的一部分:
public static void main(String[] args) {
try {
br = new BufferedReader(new FileReader(theFile));
String line = null;
while ((line = br.readLine()) != null) {
String[] aLine = line.split("/t");
br.readLine();
numLine.add(aLine);
}
} catch (IOException e){
} finally {
try {
br.close();
} catch (Exception e) {
}
}
for (int i=0; i < numLine.size(); i++){
for (int j = 0; j < numLine.get(i).length; j++){
System.out.print(numLine.get(i)[j] + " ");
// if (!((numLine.get(i)[j]).equals("\t"))){
intList.add(Integer.parseInt(numLine.get(i)[j]));
// }
}
System.out.println();
}
}
这就是错误所说的:
Exception in thread "main" java.lang.NumberFormatException: For input string: "6 10 9 10 12 "
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at readingTextFiles.Main.main(Main.java:34)
请考虑到我是一名新手程序员,从研究中得到了所有这些,所以我不确定该理论是如何运作的。
答案 0 :(得分:2)
更改分隔符为@kayKay提到,您正在尝试再次读取该行。我想你不应该
public static void main(String[] args) {
try {
br = new BufferedReader(new FileReader(theFile));
String line = null;
while ((line = br.readLine()) != null) {
String[] aLine = line.split("\t"); // Also as kaykay mentioned change /t to \t
//br.readLine(); // You are reading the line again - Comment it out
numLine.add(aLine);
}
} catch (IOException e){
} finally {
try {
br.close();
} catch (Exception e) {
}
}
for (int i=0; i < numLine.size(); i++){
for (int j = 0; j < numLine.get(i).length; j++){
System.out.print(numLine.get(i)[j] + " ");
// if (!((numLine.get(i)[j]).equals("\t"))){
intList.add(Integer.parseInt(numLine.get(i)[j]));
}
System.out.println();
}
答案 1 :(得分:1)
该计划的输出是什么?标签字符由\t
表示,而不是/t
(line.split("\\t");
)。此外,您需要添加验证检查,您读取的每一行实际上都是Integer
答案 2 :(得分:0)
错误消息表示您尝试解析为类似的整数:
"12abc34d" //<-- bad case - re-consider your approach
或类似的东西:
" 911 " //<-- this can be fixed quickly
,在此处添加trim()
:
intList.add(Integer.parseInt(numLine.get(i)[j].trim()));