在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