有没有办法确定循环是否最后一次迭代.我的代码看起来像这样:
int[] array = {1, 2, 3...}; StringBuilder builder = new StringBuilder(); for(int i : array) { builder.append("" + i); if(!lastiteration) builder.append(","); }
现在问题是我不想在最后一次迭代中附加逗号.现在有一种方法可以确定它是最后一次迭代还是我坚持使用for循环或使用外部计数器来跟踪.
另一种方法是在追加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时,"添加逗号然后将其删除"是一个很好的建议 - 但它不适用于写入流等内容.虽然这可能是解决这个问题的最佳方法. )
另一种方法:
String delim = ""; for (int i : ints) { sb.append(delim).append(i); delim = ","; }
更新:对于Java 8,您现在拥有收集器
总是追加可能更容易.然后,当你完成循环时,只需删除最后一个字符.通过这种方式减少条件.
您可以使用索引为StringBuilder
的sdeleteCharAt(int index)
length() - 1
也许你正在使用错误的工具来完成工作.
这比你正在做的更加手动,但如果不是有点"旧学校",它会更优雅
StringBuffer buffer = new StringBuffer(); Iterator iter = s.iterator(); while (iter.hasNext()) { buffer.append(iter.next()); if (iter.hasNext()) { buffer.append(delimiter); } }
这几乎是StackOverflow问题的重复.你想要的是StringUtils,并调用join方法.
StringUtils.join(strArr, ',');
另一种解决方案(也许效率最高)
int[] array = {1, 2, 3}; StringBuilder builder = new StringBuilder(); if (array.length != 0) { builder.append(array[0]); for (int i = 1; i < array.length; i++ ) { builder.append(","); builder.append(array[i]); } }
显式循环总是比隐式循环更好.
builder.append( "" + array[0] ); for( int i = 1; i != array.length; i += 1 ) { builder.append( ", " + array[i] ); }
你应该将整个事情包装在if语句中,以防你处理零长度数组.
保持简单并使用标准for循环:
for(int i = 0 ; i < array.length ; i ++ ){ builder.append(array[i]); if( i != array.length - 1 ){ builder.append(','); } }
或者只使用apache commons-lang StringUtils.join()