当你必须遍历一个集合并用分隔符将每个数据组成一个字符串时,你总是会在最后得到一个额外的分隔符,例如:
for (String serverId : serverIds) {
sb.append(serverId);
sb.append(",");
}
给出类似serverId_1 serverId_2 serverId_3
我想删除StringBuilder中的最后一个字符(不转换它,因为在这个循环之后我仍然需要它)。
当你必须遍历一个集合并用分隔符将每个数据组成一个字符串时,你总是会在最后得到一个额外的分隔符,例如:
for (String serverId : serverIds) {
sb.append(serverId);
sb.append(",");
}
给出类似serverId_1 serverId_2 serverId_3
我想删除StringBuilder中的最后一个字符(不转换它,因为在这个循环之后我仍然需要它)。
当前回答
在这种情况下,
sb.setLength(sb.length() - 1);
是可取的,因为它只是将最后一个值分配给'\0',而删除最后一个字符的System.arraycopy
其他回答
还有另一种选择:
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();
}
我正在做的事情如下:
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);
}
在这种情况下,
sb.setLength(sb.length() - 1);
是可取的,因为它只是将最后一个值分配给'\0',而删除最后一个字符的System.arraycopy
另一种替代方法
for(String serverId : serverIds) {
sb.append(",");
sb.append(serverId);
}
sb.deleteCharAt(0);