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

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

给出类似serverId_1 serverId_2 serverId_3

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


当前回答

其他人指出了deleteCharAt方法,但这里有另一种替代方法:

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

或者,使用来自Guava的Joiner类:)

从Java 8开始,StringJoiner是标准JRE的一部分。

其他回答

if(sb.length() > 0){
    sb.deleteCharAt(sb.length() - 1);
}

从Java 8开始,String类有一个静态方法连接。第一个参数是每对字符串之间的字符串,第二个参数是Iterable<CharSequence>(这两个都是接口,所以List< string >之类的东西可以工作。所以你可以这样做:

String.join(",", serverIds);

同样在Java 8中,您可以使用新的StringJoiner类,用于您想要在有完整的元素列表之前开始构造字符串的场景。

另外,

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

我正在做的事情如下:

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

这里有另一个解决方案:

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

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