In for each loop i want to skip ", " in last iteration

问题

我想在最后一次迭代中跳过打印“,”。

我想要名称,名称,名称等输出

现在我得到的输出是名字,名字,名字,

StringBuffer stringBuffer = new StringBuffer();
for(MovieModel.Cast cast : movieModelList.get(position).getCastList()){
    stringBuffer.append(cast.getName() + ", ");
}
回答1
StringBuffer stringBuffer = new StringBuffer();
for(MovieModel.Cast cast : movieModelList.get(position).getCastList()){
    if (stringBuffer.length() != 0) {
        stringBuffer.append(",");
    }
    stringBuffer.append(cast.getName());
}
回答2
// copied from https://commons.apache.org/proper/commons-lang/apidocs/src-html/org/apache/commons/lang3/StringUtils.html
public static String join(final Iterator<?> iterator, final String separator) {
    // handle null, zero and one elements before building a buffer
    if (iterator == null) {
        return null;
    }
    if (!iterator.hasNext()) {
        return EMPTY;
    }
    final Object first = iterator.next();
    if (!iterator.hasNext()) {
        return Objects.toString(first, "");
    }
    // two or more elements
    final StringBuilder buf = new StringBuilder(STRING_BUILDER_SIZE); // Java default is 16, probably too small
    if (first != null) {
        buf.append(first);
    }
    while (iterator.hasNext()) {
        if (separator != null) {
            buf.append(separator);
        }
        final Object obj = iterator.next();
        if (obj != null) {
            buf.append(obj);
        }
    }
    return buf.toString();
}
回答3
stringBuffer.delete(stringBuffer.length() - 2, stringBuffer.length());
回答4

首先插入分隔符更容易。 但是,从变量中附加分隔符:

StringBuffer stringBuffer = new StringBuffer();
String delim = "";
for(MovieModel.Cast cast : movieModelList.get(position).getCastList()){
  stringBuffer.append(delim);
  stringBuffer.append(cast.getName());
  delim = ",";
}

这样,您不会在第一个元素之前附加, ,而是在后续元素之前附加。

几点注意事项:

  • 不要连接字符串以将它们附加到缓冲区。 这破坏了缓冲区的意义(有点,不完全)。 追加一部分,然后追加另一部分。
  • 您几乎肯定想使用StringBuilder而不是 StringBuffer:

    从 JDK 5 版本开始,[StringBuffer] 已经补充了一个为单线程使用而设计的等效类 StringBuilder。 通常应优先使用 StringBuilder 类,因为它支持所有相同的操作,但速度更快,因为它不执行同步。

回答5
StringBuffer stringBuffer = new StringBuffer();
for(MovieModel.Cast cast : movieModelList.get(position).getCastList()){
   stringBuffer.append(cast.getName());
   stringBuffer.append(", ");     
}
stringBuffer.delete(stringBuffer.length() - 2, stringBuffer.length());

更多相关内容:请点击查看