在Java中迭代字符串列表
我正在遍历字符串列表。我需要以逗号分隔的格式打印每个列表,最后一个元素除外。这是我的密码在Java中迭代字符串列表,java,iterator,Java,Iterator,我正在遍历字符串列表。我需要以逗号分隔的格式打印每个列表,最后一个元素除外。这是我的密码 for(Iterator itr = list.iterator(); itr.hasNext();){ List<String> l = (List<String>) itr.next(); for(Iterator it = l.iterator(); it.hasNext();){ System.out.print(it.next() + " ")
for(Iterator itr = list.iterator(); itr.hasNext();){
List<String> l = (List<String>) itr.next();
for(Iterator it = l.iterator(); it.hasNext();){
System.out.print(it.next() + " ");
}
System.out.println();
}
如何格式化打印逻辑以删除最后一个元素后的逗号。我可以在
for I
循环中根据上一个索引检查I
的值,但我想知道如何使用Java中的迭代器来执行此操作。使用Java 8,您不需要编写任何循环,只需使用:
返回一个新的字符串
,该字符串由CharSequence
元素的副本和指定分隔符的副本组成
示例代码为:
for(Iterator<List<String>> itr = list.iterator(); itr.hasNext();){
List<String> l = itr.next();
String str = String.join(", ", l);
System.out.println(str);
}
for(迭代器itr=list.Iterator();itr.hasNext();){
列表l=itr.next();
String str=String.join(“,”,l);
系统输出打印项次(str);
}
有了这样的代码,您就不必担心删除最后一个分隔符。据我所知,您有列表
。这是Java 8流api的外观:
List<List<String>> list = Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h");
String result = list.stream()
.flatMap(innerList -> innerList.stream())
.collect(joining(","));
如果要将每个内部列表单独列在一行中,请尝试以下操作:
String result = list.stream()
.map(innerList -> innerList.stream().collect(joining(",")))
.collect(joining("\n"));
这将为您提供如下输出:
a,b,c,d,e,g,h
a,b,c
d,e
g,h
下面是一个有助于使用分隔符的常规技巧。扭转这个问题。不要将分隔符追加到除最后一个字符串之外的所有字符串,而是在除第一个字符串之外的所有字符串之前打印它。在第一次迭代中,让特殊的事情发生往往更容易。这里有一种使用这种想法的方法:
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> list = Arrays.asList(new String[]{"aa", "bb", "cc"});
String delim = "";
for(String s : list){
System.out.print(delim);
delim = ", ";
System.out.print(s);
}
System.out.println();
}
}
为什么要使用迭代器?使用流api和.collect(加入(“,”)
好的,我从来没有使用过流api,不知道怎么做。“我需要以逗号分隔的格式打印每个列表,除了最后一个元素”因此,如果您的列表是[[a,b][c,d,e]
,您是否要打印a,b[lineSeparator]c,d,e
或a,b,c,d,e
?作为记录,即使您得到的答案比您得到的答案更优雅,您可以在调用next()之后测试迭代器是否有下一个元素。如果它没有下一个元素,那么就不要打印后面的逗号。我们不能确切地知道OP是否有列表
,这就是为什么我一直使用迭代器
方法OP的原因。尽管如此,答案仍然有效。@Tunaki是个好主意。然而,在这种情况下,我们可以将迭代器转换为流。我基于外部循环中的list.iterator()
做出了这样的假设。
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> list = Arrays.asList(new String[]{"aa", "bb", "cc"});
String delim = "";
for(String s : list){
System.out.print(delim);
delim = ", ";
System.out.print(s);
}
System.out.println();
}
}
aa, bb, cc