2010-10-26 85 views
2

我使用OpenCSV從CSV文件中讀取數據,並正在使用一些來自網頁的示例代碼:迭代Java中的字符串列表?

CSVReader reader = new CSVReader(new FileReader("stockInfo.csv")); 
List myEntries = reader.readAll(); 

,現在我通過這個列表試圖循環並打印出每個條目。但我似乎無法弄清楚執行此操作的代碼。

任何人都可以向我解釋我應該怎麼做,因爲我似乎不能解決它。

回答

2

不能這樣做: 1)

for(int i = 0; i < myEntries.size(); i++){ 
    myEntries.get(i); // do something else here 
} 

2)

for(String s: myEntries) 
    // Do work on s here 
+0

閱讀文檔(http://opencsv.sourceforge.net/api/au/com/bytecode/opencsv/CSVReader.html),喲。這是一個字符串數組列表。 – 2010-10-26 21:41:37

+0

ok,然後是String []。相同點,喲。 – skaz 2010-10-27 01:53:33

2

您是否嘗試過使用迭代器? 它應該是這樣的:

Iterator it = myEntries.iterator(); 
while(it.hasNext()){ 
    System.out.println(it.next()); 
} 
+1

只需使用for循環,代碼就更少了。 – 2010-10-27 03:04:47

1

您應該使用泛型與CSVReader如果可能的話。 readAll()實際上返回List<String[]>而不是List<String>。然後,你只需要:

for (String[] row : myEntries) { 
    System.out.println(Arrays.toString(row)); 
} 
6

假設你要輸出到它自己的行每行的每個條目:

List<String[]> myEntries = reader.readAll(); 
    for (String[] lineTokens : myEntries) { 
     for (String token : lineTokens) { 
      System.out.println(token); 
     } 
    } 
0

你可以做這個效果的東西。我在迭代器上添加了同步。

List<String[]> myEntries = reader.readAll(); 
Iterator<String[]> iter = myEntries.iterator(); 
synchronized (iter) { 
    while (iter.hasNext()) { 
     String[] items = iter.next(); 

     for (String item: items) { //foreach loop 
      //Work with `item` 
     } 
    } 
} 
+1

你的'synchronized'是無用的,因爲'iterator()'將返回一個新的'Iterator'實例。所以你正在同步不與任何其他線程共享的局部變量。 – 2010-10-26 22:35:39

+0

@steve郭,這是一個古老的習慣... – 2010-10-26 22:45:35