我正在遍历一系列字符串列表。我需要以逗号分隔格式打印每个列表,除了最后一个元素。这是我的代码。
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();
}
这会打印类似
的内容listen, silent, tinsel,
如何格式化打印逻辑以删除最后一个元素后的逗号。我可以在for i
循环上检查i
对最后一个索引的值,但希望知道如何使用Java中的Iterator
。
答案 0 :(得分:5)
使用Java 8,您不必编写任何循环,只需使用String.join(delimiter, elements)
:
返回由
String
元素的副本组成的新CharSequence
,其中包含指定分隔符的副本。
示例代码为:
for(Iterator<List<String>> itr = list.iterator(); itr.hasNext();){
List<String> l = itr.next();
String str = String.join(", ", l);
System.out.println(str);
}
使用此类代码,您无需担心删除最后一个分隔符。
答案 1 :(得分:2)
据我所知,你有List<List<String>>
。这就是Java 8 stream 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(","));
flatMap
获取所有内部列表,并通过连接列表创建单个字符串流。
collect(joining(","))
获取此单个流中的所有元素,并创建String
,其中值以{{1}}分隔。
这将为您提供如下输出:
","
如果您希望每个内部列表位于单独的行上,请尝试以下方法:
a,b,c,d,e,g,h
这将为您提供如下输出:
String result = list.stream()
.map(innerList -> innerList.stream().collect(joining(",")))
.collect(joining("\n"));
答案 2 :(得分:1)
这是一个可以帮助分隔符的一般技巧。转过来解决问题。不是将分隔符附加到除最后一个字符串之外的所有分隔符,而是将其打印在除第一个字符串之外的所有字符串之前。在第一次迭代中,通常更容易使特殊事情发生。这是使用这个想法的一种方法:
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