我使用OpenCSV從CSV文件中讀取數據,並正在使用一些來自網頁的示例代碼:迭代Java中的字符串列表?
CSVReader reader = new CSVReader(new FileReader("stockInfo.csv"));
List myEntries = reader.readAll();
,現在我通過這個列表試圖循環並打印出每個條目。但我似乎無法弄清楚執行此操作的代碼。
任何人都可以向我解釋我應該怎麼做,因爲我似乎不能解決它。
我使用OpenCSV從CSV文件中讀取數據,並正在使用一些來自網頁的示例代碼:迭代Java中的字符串列表?
CSVReader reader = new CSVReader(new FileReader("stockInfo.csv"));
List myEntries = reader.readAll();
,現在我通過這個列表試圖循環並打印出每個條目。但我似乎無法弄清楚執行此操作的代碼。
任何人都可以向我解釋我應該怎麼做,因爲我似乎不能解決它。
不能這樣做: 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
您是否嘗試過使用迭代器? 它應該是這樣的:
Iterator it = myEntries.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
只需使用for循環,代碼就更少了。 – 2010-10-27 03:04:47
您應該使用泛型與CSVReader
如果可能的話。 readAll()
實際上返回List<String[]>
而不是List<String>
。然後,你只需要:
for (String[] row : myEntries) {
System.out.println(Arrays.toString(row));
}
假設你要輸出到它自己的行每行的每個條目:
List<String[]> myEntries = reader.readAll();
for (String[] lineTokens : myEntries) {
for (String token : lineTokens) {
System.out.println(token);
}
}
你可以做這個效果的東西。我在迭代器上添加了同步。
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`
}
}
}
你的'synchronized'是無用的,因爲'iterator()'將返回一個新的'Iterator'實例。所以你正在同步不與任何其他線程共享的局部變量。 – 2010-10-26 22:35:39
@steve郭,這是一個古老的習慣... – 2010-10-26 22:45:35
閱讀文檔(http://opencsv.sourceforge.net/api/au/com/bytecode/opencsv/CSVReader.html),喲。這是一個字符串數組列表。 – 2010-10-26 21:41:37
ok,然後是String []。相同點,喲。 – skaz 2010-10-27 01:53:33