当你必须遍历一个集合并用分隔符将每个数据组成一个字符串时,你总是会在最后得到一个额外的分隔符,例如:
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中的最后一个字符(不转换它,因为在这个循环之后我仍然需要它)。
当前回答
if(sb.length() > 0){
sb.deleteCharAt(sb.length() - 1);
}
其他回答
StringBuilder sb = new StringBuilder();
sb.append("abcdef");
sb.deleteCharAt(sb.length() - 1);
assertEquals("abcde",sb.toString());
// true
if(sb.length() > 0){
sb.deleteCharAt(sb.length() - 1);
}
另一种替代方法
for(String serverId : serverIds) {
sb.append(",");
sb.append(serverId);
}
sb.deleteCharAt(0);
在Java-8中,你可以使用String类的静态方法,
字符串#加入(CharSequence进行分隔符,Iterable < ?extends CharSequence> elements)。
public class Test {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("James");
names.add("Harry");
names.add("Roy");
System.out.println(String.join(",", names));
}
}
输出
James,Harry,Roy
在这种情况下,
sb.setLength(sb.length() - 1);
是可取的,因为它只是将最后一个值分配给'\0',而删除最后一个字符的System.arraycopy