2016-04-27 65 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)));