Integer.Parse在Excel提取的字符串上引发NumberFormatException

时间:2019-02-11 17:08:17

标签: java excel

在我的程序中,我获取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)

1 个答案:

答案 0 :(得分:1)

您的CSV文件以以UTF-8编码的byte order mark开头。例如,如果您在十六进制编辑器中打开文件,则可以看到它:

尽管看不到多余的字节EF BB BF,但它们却使Integer.parseInt感到沮丧。

有关其他解决方案,请参见Byte order mark screws up file reading in Java