迭代Java中的字符串列表

时间:2016-02-21 18:56:58

标签: 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() + " ");
    }
    System.out.println();
}

这会打印类似

的内容
listen, silent, tinsel,

如何格式化打印逻辑以删除最后一个元素后的逗号。我可以在for i循环上检查i对最后一个索引的值,但希望知道如何使用Java中的Iterator

3 个答案:

答案 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