2015-12-30 32 views
3

點我想解析以下CSV文件:解析的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

因爲當您在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 + " ");,因爲它沒有任何意義在行後添加空格,然後轉到新行(println()

1

這是由UTF-8 signature引起的在文件的開頭(查看數據,你的文件可能編碼在UTF-8)。

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

的字節0xEF, 0xBB, 0xBF在ASCII),轉換爲一箇中心的點在UTF-8

您可能必須修剪掉(或者檢查您是否可以提供參數CSVReaderFileReader跳過這些字節)。有關更多信息,請參閱here