Mer*_*ous 134 java foreach for-loop conditional-execution
有没有办法确定循环是否最后一次迭代.我的代码看起来像这样:
int[] array = {1, 2, 3...};
StringBuilder builder = new StringBuilder();
for(int i : array)
{
builder.append("" + i);
if(!lastiteration)
builder.append(",");
}
Run Code Online (Sandbox Code Playgroud)
现在问题是我不想在最后一次迭代中附加逗号.现在有一种方法可以确定它是最后一次迭代还是我坚持使用for循环或使用外部计数器来跟踪.
Jon*_*eet 220
另一种方法是在追加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);
}
Run Code Online (Sandbox Code Playgroud)
关于这一点的好处是它可以与任何Iterable东西一起工作- 你不能总是索引东西.(当你真正使用StringBuilder时,"添加逗号然后将其删除"是一个很好的建议 - 但它不适用于写入流等内容.虽然这可能是解决这个问题的最佳方法. )
too*_*kit 143
另一种方法:
String delim = "";
for (int i : ints) {
sb.append(delim).append(i);
delim = ",";
}
Run Code Online (Sandbox Code Playgroud)
更新:对于Java 8,您现在拥有收集器
Din*_*nah 39
总是追加可能更容易.然后,当你完成循环时,只需删除最后一个字符.通过这种方式减少条件.
您可以使用索引为StringBuilder的sdeleteCharAt(int index)length() - 1
Oma*_*eji 31
也许你正在使用错误的工具来完成工作.
这比你正在做的更加手动,但如果不是有点"旧学校",它会更优雅
StringBuffer buffer = new StringBuffer();
Iterator iter = s.iterator();
while (iter.hasNext()) {
buffer.append(iter.next());
if (iter.hasNext()) {
buffer.append(delimiter);
}
}
Run Code Online (Sandbox Code Playgroud)
Phi*_*l H 15
这几乎是StackOverflow问题的重复.你想要的是StringUtils,并调用join方法.
StringUtils.join(strArr, ',');
Run Code Online (Sandbox Code Playgroud)
bru*_*nde 14
另一种解决方案(也许效率最高)
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]);
}
}
Run Code Online (Sandbox Code Playgroud)
显式循环总是比隐式循环更好.
builder.append( "" + array[0] );
for( int i = 1; i != array.length; i += 1 ) {
builder.append( ", " + array[i] );
}
Run Code Online (Sandbox Code Playgroud)
你应该将整个事情包装在if语句中,以防你处理零长度数组.
保持简单并使用标准for循环:
for(int i = 0 ; i < array.length ; i ++ ){
builder.append(array[i]);
if( i != array.length - 1 ){
builder.append(',');
}
}
Run Code Online (Sandbox Code Playgroud)
或者只使用apache commons-lang StringUtils.join()
小智 5
正如工具包提到的,在 Java 8 中我们现在有了Collectors。代码如下所示:
String joined = array.stream().map(Object::toString).collect(Collectors.joining(", "));
Run Code Online (Sandbox Code Playgroud)
我认为这正是您所寻找的,并且这是一种可以用于许多其他事情的模式。
| 归档时间: |
|
| 查看次数: |
72953 次 |
| 最近记录: |