在java中增强for循环的最后一次迭代

问题

有没有办法确定循环是否最后一次迭代。我的代码看起来像这样:

int[] array = {1, 2, 3...};
StringBuilder builder = new StringBuilder();

for(int i : array)
{
    builder.append("" + i);
    if(!lastiteration)
        builder.append(",");
}

现在问题是我不想在最后一次迭代中附加逗号。现在有一种方法可以确定它是最后一次迭代还是我坚持使用for循环或使用外部计数器来跟踪。


#1 热门回答(216 赞)

另一个选择是在你追加i之前附加逗号,而不是在第一个时候。 (请不要使用"" + i,顺便说一下 - 你真的不想在这里连接,而且StringBuilder有一个非常好的追加(int)重载。)

int[] array = {1, 2, 3...};
StringBuilder builder = new StringBuilder();

for (int i : array) {
    if (builder.length() != 0) {
        builder.append(",");
    }
    builder.append(i);
}

关于这一点的好处是它可以与任何Iterable一起工作 - 你不能总是索引事物。 (当你真正使用StringBuilder时,"添加逗号然后在最后删除它"是一个很好的建议 - 但它不适用于写入流等的东西。虽然这可能是解决这个问题的最佳方法。 )


#2 热门回答(140 赞)

另一种方法:

String delim = "";
for (int i : ints) {
    sb.append(delim).append(i);
    delim = ",";
}

更新:对于Java 8,你现在拥有56532067


#3 热门回答(39 赞)

总是追加可能更容易。然后,当你完成循环时,只需删除最后一个字符。通过这种方式减少条件。

你可以使用StringBuilderdeleteCharAt(int index),索引号为length() - 1