2014-10-20 32 views
2

我將tsv文件的數據添加到列表中。但它反覆提供數據。如何使用收集來讀取和顯示tsv文件

這是TSV文件

UserID City State Country ZipCode DegreeType Major GraduationDate WorkHistoryCount   TotalYearsExperience CurrentlyEmployed ManagedOthers ManagedHowMany 
47 Paramount CA US 90723 High School  6/1/1999 0:00 3 10 Yes No 0 
72 La Mesa CA US 91941 Master's Anthropology 1/1/2011 0:00 10 8 Yes No 0 
80 Williamstown NJ US 8094 High School Not Applicable 6/1/1985 0:00 5 11 Yes Yes 5 
98 Astoria NY US 11105 Master's Journalism 5/1/2007 0:00 3 3 Yes No 0 

這是我的代碼

public class tsv_read{ 

public static void main(String[] arg) throws Exception { 

BufferedReader TSVFile = 
    new BufferedReader(new FileReader("tsvfile.tsv")); 

String dataRow = TSVFile.readLine(); 
List<String> list = new ArrayList<String>(); 
while (dataRow != null){ 
String[] dataArray = dataRow.split("\t"); 
for (String item:dataArray) { 

    list.add(item); 

    } 
Iterator<String> it = list.iterator(); 
while (it.hasNext()) { 
    String txt = it.next(); 
    System.out.print(txt); 
} 
System.out.println(); // Print the data line. 
dataRow = TSVFile.readLine(); 
} 

TSVFile.close(); 

System.out.println(); 

} //main() 
} 

這是我有

UserIDCityStateCountryZipCodeDegreeTypeMajorGraduationDateWorkHistoryCountTotalYearsExperienceCurrentlyEmployedManagedOthersManagedHowMany 
    UserIDCityStateCountryZipCodeDegreeTypeMajorGraduationDateWorkHistoryCountTotalYearsExperienceCurrentlyEmployedManagedOthersManagedHowMany47ParamountCAUS90723High School6/1/1999 0:00310YesNo0 
    UserIDCityStateCountryZipCodeDegreeTypeMajorGraduationDateWorkHistoryCountTotalYearsExperienceCurrentlyEmployedManagedOthersManagedHowMany47ParamountCAUS90723High School6/1/1999 0:00310YesNo072La MesaCAUS91941Master'sAnthropology1/1/2011 0:00108YesNo0 
    UserIDCityStateCountryZipCodeDegreeTypeMajorGraduationDateWorkHistoryCountTotalYearsExperienceCurrentlyEmployedManagedOthersManagedHowMany47ParamountCAUS90723High School6/1/1999 0:00310YesNo072La MesaCAUS91941Master'sAnthropology1/1/2011 0:00108YesNo080WilliamstownNJUS8094High SchoolNot Applicable6/1/1985 0:00511YesYes5 
    UserIDCityStateCountryZipCodeDegreeTypeMajorGraduationDateWorkHistoryCountTotalYearsExperienceCurrentlyEmployedManagedOthersManagedHowMany47ParamountCAUS90723High School6/1/1999 0:00310YesNo072La MesaCAUS91941Master'sAnthropology1/1/2011 0:00108YesNo080WilliamstownNJUS8094High SchoolNot Applicable6/1/1985 0:00511YesYes598AstoriaNYUS11105Master'sJournalism5/1/2007 0:0033YesNo0 

我想要的輸出如表格式輸出

回答

0

你只是需要d添加

list.clear(); 

在每次運行循環開始時。

while (dataRow != null){ 
    list.clear(); 
    String[] dataArray = dataRow.split("\t"); 
    // etc. 

發生了什麼事,此刻是你的List是不斷擴張......在第一線,您可以添加從該行的所有字段,然後在第二行,添加所有這些字段拖到結束,等等...但是你永遠不會清空列表並重新開始。

的替代解決方案將是移動循環內的List聲明:

String dataRow = TSVFile.readLine(); 
while (dataRow != null){ 
    List<String> list = new ArrayList<String>(); 
    String[] dataArray = dataRow.split("\t"); 
    // etc. 

這樣一來,你每次結束了一個新的列表。

如果你想知道爲什麼你打印的字段都是一起運行,順便說一句,這是因爲你不需要任何形式的分隔符就可以多次調用System.out.print(txt)。你可能想從System.out.print(txt+" ")開始,直到你決定了你想要的確切格式。

+0

感謝ü...現在我以表格的形式 – 2014-10-20 09:32:51

+0

了@MadhaviTalla不客氣!如果您發現它有幫助,請點擊打勾以標記爲已接受的答案。 (也給你一些代表點。) – 2014-10-20 09:41:01

+0

我可以從列表中搜索數據嗎?這意味着我想使用列表作爲數據庫 – 2014-10-20 09:41:28

0

試試這個

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.util.ArrayList; 
import java.util.List; 

public class tsv_read1{ 

    public static void main(String[] arg) throws Exception { 

     BufferedReader TSVFile = new BufferedReader(new FileReader("tsvfile.tsv")); 
     List<String>dataArray = new ArrayList<String>() ; 
     String dataRow = TSVFile.readLine(); 
     while (dataRow != null){ 
      dataArray.add(dataRow); 
      dataRow = TSVFile.readLine(); 
     } 
     TSVFile.close();  
     for(String item:dataArray){ 
      System.out.println(item); 
     } 
    }  
} 
相關問題