我在读取包含格式为#.##,#.##的数字的csv文件时遇到问题,这些数字是由另一个程序以字符串形式随机写入的双精度(坐标)。

这是我用来从文件中读取并解析坐标的代码的一部分:

    private void populateData() {

    for (int i = 0; i < this.data[0].length; i++) {
        try {
            BufferedReader br = new BufferedReader(new FileReader("Sample.csv"));
            while (br.readLine() != null) {
                String[] split = br.readLine().split(",");
                this.data[0][i] = Float.parseFloat(split[0].trim());
                this.data[1][i] =Float.parseFloat(split[1].trim());
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(FastScatterPlotDemo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(FastScatterPlotDemo.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

}


它给了我一个怪异的例外

Exception in thread "main" java.lang.NumberFormatException: For input string: "4⌷�3⌷�9⌷�.⌷�8⌷�9⌷"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
at java.lang.Float.parseFloat(Float.java:422)
at lab05b_Task2.FastScatterPlotDemo.populateData(FastScatterPlotDemo.java:86)
at lab05b_Task2.FastScatterPlotDemo.<init>(FastScatterPlotDemo.java:41)
at lab05b_Task2.FastScatterPlotDemo.main(FastScatterPlotDemo.java:107)


我不知道这与我在ubuntu上工作有关,这是一个编码问题。

最佳答案

您似乎有一个UTF-16编码的文件。您必须确定它是UTF-16LE还是UTF-16BE。我会先猜UTF-16LE。我建议您设置编码以匹配文件,并且应该正确阅读。如果您不知道编码应该是什么,请询问文件的来源/使用的是什么。

顺便说一句,如果可以避免,请不要使用float。请尝试使用doubleBigDecimal

10-07 19:26
查看更多