在我的程序中,我获取Excel表的每一行。当我分割行时,为了将数组的每个String
解析为Integer
,标题中提到的Exception被抛出。该表以这种方式填充:
0;1;100;4;1000;8;8
...
该表另存为.csv
,这就是为什么我被;
分开
想法:文件值包含错误的字符:
我已经检查了宽度为0的字符...
代码段:
try {
bufferedReader = new BufferedReader(new FileReader(fileName));
while ((line = bufferedReader.readLine()) != null) {
if(flag == 0){
tableSize = line.split(";").length;
System.out.println("TableSize is: "+tableSize);
flag = 1;
table1 = new int[tableSize][tableSize];
}
String [] tempStrings = line.split(";");
int [] tempInts = new int[tableSize];
for(int i=0; i<tableSize;i++){
tempInts[i] = Integer.parseInt(tempStrings[i]);
System.out.println(tempInts[i]);
}
table1[row] = tempInts;
row++;
}
我们非常感谢您的帮助!
编辑:创建新的.csv文件后,出现相同的问题
NumberFormatException的堆栈跟踪:
java.lang.NumberFormatException: For input string: "0"
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 excercise.Main.fillTableByCsv(Main.java:53)
at excercise.Main.main(Main.java:22)
答案 0 :(得分:1)
您的CSV文件以以UTF-8编码的byte order mark开头。例如,如果您在十六进制编辑器中打开文件,则可以看到它:
尽管看不到多余的字节EF BB BF,但它们却使Integer.parseInt
感到沮丧。
有关其他解决方案,请参见Byte order mark screws up file reading in Java。