java - string去掉最后一个字符 - 删除StringBuilder的最后一个字符?




stringbuilder长度 (11)

当你必须遍历一个集合并且用分隔符分隔每个数据的字符串时,你总是会在最后得到一个额外的分隔符,例如

for(String serverId : serverIds) {
 sb.append(serverId);
 sb.append(",");
}

给出如下内容: serverId_1,serverId_2,serverId_3,

我想删除StringBuilder中的最后一个字符(无需转换它,因为在此循环之后我仍然需要它)。


从Java 8开始,内置了一个新的StringJoiner类。

StringJoiner sj = new StringJoiner(", ");
for (String serverId : serverIds) {
    sj.add(serverId)
}


另一个简单的解决方案是

sb.setLength(sb.length() - 1);

更复杂的解决方案:

上面的解决方案假定sb.length() > 0 ...即有一个“最后一个字符”要移除。 如果你不能做出这样的假设,并且/或者你不能处理在假设不正确的情况下会发生的异常,那么先检查StringBuilder的长度; 例如

// Readable version
if (sb.length() > 0) {
   sb.setLength(sb.length() - 1);
}

要么

// Concise but harder-to-read version of the above.
sb.setLength(Math.max(sb.length() - 1, 0));

另一种选择

for(String serverId : serverIds) {
   sb.append(",");
   sb.append(serverId); 
}
sb.deleteCharAt(0);

在这种情况下,

sb.setLength(sb.length() - 1);

是最好的,因为它只是将最后一个值赋给'\0'而删除最后一个字符是System.arraycopy


您可以尝试使用“Joiner”类,而不是从生成的文本中删除最后一个字符;

                List<String> textList = new ArrayList<>();
                textList.add("text1");
                textList.add("text2");
                textList.add("text3");

                Joiner joiner = Joiner.on(",").useForNull("null");
                String output = joiner.join(textList);

               //output : "text1,text2,text3"

我正在做这样的事情:

    StringBuilder stringBuilder = new StringBuilder();
    for (int i = 0; i < value.length; i++) {
        stringBuilder.append(values[i]);
        if (value.length-1) {
            stringBuilder.append(", ");
        }
    }

或者,

StringBuilder result = new StringBuilder();
    for(String string : collection) {
        result.append(string);
        result.append(",");
    }
    return result.substring(0, result.length() - 1) ;

还有另一种选择:

public String join(Collection<String> collection, String seperator) {
    if (collection.isEmpty()) return "";

    Iterator<String> iter = collection.iterator();
    StringBuilder sb = new StringBuilder(iter.next());
    while (iter.hasNext()) {
        sb.append(seperator);
        sb.append(iter.next());
    }

    return sb.toString();
}

这是另一个解决方案:

for(String serverId : serverIds) {
   sb.append(",");
   sb.append(serverId); 
}

String resultingString = "";
if ( sb.length() > 1 ) {
    resultingString = sb.substring(1);
}

sb.deleteCharAt(sb.length()-1) 






stringbuilder