2016-04-27 122 views
-2

我正在用openCSV閱讀器讀取csv文件。有一個方法readAll給出了List作爲結果。如何遍歷包含字符串數組的列表

List<String[]> myEntries = reader.readAll(); 

我想從它得到每個字符串。我試過了,但沒有解決。

Iterator itr = myEntries.iterator(); 
while(itr.hasNext()) { 
    Object element = itr.next(); 
    for(String temp:element) 
     System.out.println(temp); 
} 

它給我一個錯誤的說法,foreach不能應用於輸入Object。如何從中獲取字符串?

+2

爲什麼'element'是Object而不是'String []'? – CollinD

+0

類型轉換在代碼中使用不正確。 – aksappy

回答

2

如果解決這個問題的方式是不是對你很重要的話,建議使用foreach聲明:

for(String[] a : myEntries) 
    for(String s : a) 
     // do what you want to 

否則,你應該寫這樣

Iterator<String[]> iterator = myEntries.iterator(); 
while(itr.hasNext()) 
    for(String temp : itr.next()) 
     // Don't worry, itr.next() will be created only one time 
     // for an each iteration (while) 
     System.out.println(temp); 

,看起來不漂亮,可能在閱讀上有困難。

+0

第二個不工作,它說Foreach不適用於類型對象 –

+0

@LokeshS,不要使用原始類型的迭代器,我更正了 – Andrew

+1

非常感謝... –

2

列表元素的類型爲String[]。使用此宣言:

Iterator<String[]> itr = myEntries.iterator(); 

... 

String[] element = itr.next(); 
+0

不,它不工作說法必需:Java.lang.String []找到:Java.lang.Object。我很驚訝....我期望的要求:對象,但發現:String [] –

+0

是的,迭代器也需要正確輸入。請參閱更新 – Henry

0

嘗試下面的代碼,

for (String[] element : myEntries) { 
    for (String temp : element) 
     System.out.println(temp); 

} 
0
reader.readAll().forEach(stringArray -> { 
    for(String element : stringArray){ 
     System.out.println(element); 
    } 
}); 
0

最簡單的方法是使用一個foreach循環,就像你的數組:

for (String[] entry : myEntries) { 
    for (String temp : element) { 
     System.out.println(temp); 
    } 
} 

如果你真的需要一個迭代器,那麼不要使用原始類型:

for (Iterator<String[]> it = myEntries.iterator(); it.hasNext();) { 
    String[] entry = it.next(); 
    for (String temp : entry) { 
     System.out.println(temp); 
    } 
} 

即使塊中只有一條指令,也應該總是在塊周圍使用大括號。這使代碼更具可讀性,更易維護,並有助於避免許多錯誤。

+0

非常感謝 –

0

如果您更喜歡Java 8,那麼它更具說明性。

myEntries.forEach(entries -> 
    Arrays.stream(entries).forEach(entry -> System.out.println(entry)));