解析的CSV文件在开头显示点

时间:2015-12-30 19:07:00

标签: csv opencsv

我想解析以下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();
            }

输出在第一行的开头显示垂直居中的点。 有什么问题?

2 个答案:

答案 0 :(得分:1)

这是由文件开头的UTF-8 signature引起的(查看数据,您的文件可能以UTF-8编码)。

https://en.wikipedia.org/wiki/Byte_order_mark

字节0xEF, 0xBB, 0xBF(ASCII中的),转换为UTF-8中的居中点。

您可能需要修剪它(或检查是否可以向CSVReaderFileReader提供参数以跳过这些字节)。有关更多信息,请参阅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}})