2013-01-17 84 views
-1

我有一個數據格式的文件作爲解析由CSV「」和‘’

userid, friend id, books id, cd id 
1, 11 12 14 12, 223 256 333 234 222, 22 
2, 78 22, 22 66 11 29, 76 455 
3, 123 22 11 234 198 122 881, 34 12 98 64, 22 

,我只需要使用用戶ID和光盤ID,但我無法區分這些領域。

我的Java代碼如下。

BufferedReader in = new BufferedReader(new FileReader("CSV_test.txt")); 

BufferedWriter ou =new BufferedWriter(new FileWriter("users.csv")); 
String str; 
str = in.readLine(); 

while ((str = in.readLine()) != null) { 

    String[] ar = str.split(","); 
    String[] ar1 = ar[1].split(""); 


    ou.write(ar[0]); 
    ou.write(","); 
    ou.write(ar1[1]); 

    ou.newLine(); } 
in.close(); 
ou.close(); 
} 

這是否有問題?

+1

可能我建議使用StringUtils在「,」分裂? – Quetzalcoatl

+2

如果您需要製作大量與CSV相關的內容,也許您可​​以考慮使用某些庫進行CSV操作,如[SuperCSV](http://supercsv.sourceforge.net)。這不是您的問題的答案,但可以在將來提供幫助。 – joragupra

+0

這個問題似乎是無關緊要的,因爲它是一個代碼審查請求。 – Raedwald

回答

4

當然,你要

String[] ar = str.split(","); 
String user = ar[0].trim(); 
String cd = ar[3].trim(); 

請注意,我修剪,除去前/後間隔。

您可以使用", "進行拆分(注意尾部空格),這將消除進一步需要trim()。但是,它確實假設你的字段是如何分開的(逗號?逗號和空格?),也許值得研究一下CSV library

4

無需重新發明輪子。雖然CSV解析相當簡單,但有些東西可能有點複雜(例如在字段值中轉義分隔符)。現有的庫可以爲你做到這一點,如OpenCSVCsvJdbc

+0

+1圖書館建議 –

+0

+1對於我的圖書館建議也是如此。我已經能夠說服隊友在我的工作中使用圖書館來解決相同的問題。每次他們解決問題時,我都舉了一個實施失敗的例子。直到他們累了:)。有很多事情需要注意,可能會遺漏:數據中出現的分隔符,字符集問題等,使用現有的經過良好測試的API將更加簡單和安全。 –