我在读取包含格式为#.##,#.##
的数字的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
。请尝试使用double
或BigDecimal
。