簡體   English   中英

在每個循環中,我想在最后一次迭代中跳過“,”

[英]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() + ", ");
}

您可以在附加名稱之前附加逗號。 像這樣:

StringBuffer stringBuffer = new StringBuffer();
for(MovieModel.Cast cast : movieModelList.get(position).getCastList()){
    if (stringBuffer.length() != 0) {
        stringBuffer.append(",");
    }
    stringBuffer.append(cast.getName());
}

為什么要重新發明輪子? 使用 Apache Commons 中的StringUtils.join方法。 或者你可以從它的源代碼commons-lang-sources 中激發(復制+修改)

// 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();
}

在循環之后,只需刪除結尾的逗號和空格:

stringBuffer.delete(stringBuffer.length() - 2, stringBuffer.length());

先插入分隔符更容易。 但是,從變量附加分隔符:

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 類,因為它支持所有相同的操作,但速度更快,因為它不執行同步。

嘗試

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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM