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

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

给出类似serverId_1 serverId_2 serverId_3

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


当前回答

StringBuilder sb = new StringBuilder();
sb.append("abcdef");
sb.deleteCharAt(sb.length() - 1);
assertEquals("abcde",sb.toString());
// true

其他回答

这里有另一个解决方案:

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

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

在这种情况下,

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

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

另一种替代方法

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

stringBuilder.Remove(stringBuilder.Length - 1, 1);

StringBuilder sb = new StringBuilder();
sb.append("abcdef");
sb.deleteCharAt(sb.length() - 1);
assertEquals("abcde",sb.toString());
// true