我想解析以下CSV文件:
02.01.15,Januar,GEZ,Telekommunikation,"€ 211,44",01_jährlich,Ist
02.01.15,Januar,BGV: Haftpfl. + Unfall,Versicherungen,"€ 171,95",01_jährlich,Ist
我使用以下代码进行解析:
CSVReader csvReader = new CSVReader(new FileReader(file));
String [] nextLine;
while ((nextLine = csvReader.readNext()) != null) {
for (String text : nextLine) {
System.out.print(text + " ");
}
System.out.println();
}
输出在第一行的开头显示垂直居中的点。 有什么问题?
答案 0 :(得分:1)
这是由文件开头的UTF-8 signature
引起的(查看数据,您的文件可能以UTF-8
编码)。
https://en.wikipedia.org/wiki/Byte_order_mark
字节0xEF, 0xBB, 0xBF
(ASCII中的
),转换为UTF-8
中的居中点。
您可能需要修剪它(或检查是否可以向CSVReader
或FileReader
提供参数以跳过这些字节)。有关更多信息,请参阅here。
答案 1 :(得分:0)
因为当你在while循环中检查条件时,你会调用readNext()
方法。这会消耗第一行而不使用它。如果你告诉我你正在使用什么库,我可以告诉你还有什么可以做的。通常在Java中,为此目的使用hasNext()
方法。
我想你是在使用OpenCSV库,在这种情况下你可以这样做
首先导入Arraylist库import java.util.ArrayList;
CSVReader csvReader = new CSVReader(new FileReader(file));
ArrayList<String> lines = new ArrayList<String>();
lines = csvReader.readAll();
for(String line : lines) {
System.out.println(line + " ");
}
PS:如果你想在同一行打印行,你应该使用System.out.print(line + " ");
因为它没有任何意义在行之后添加空格然后转到新行({{ 1}})