当你必须遍历一个集合并用分隔符将每个数据组成一个字符串时,你总是会在最后得到一个额外的分隔符,例如:
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
其他回答
这里有另一个解决方案:
for(String serverId : serverIds) {
sb.append(",");
sb.append(serverId);
}
String resultingString = "";
if ( sb.length() > 1 ) {
resultingString = sb.substring(1);
}
您可以尝试使用'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"
if(sb.length() > 0){
sb.deleteCharAt(sb.length() - 1);
}
从Java 8开始,String类有一个静态方法连接。第一个参数是每对字符串之间的字符串,第二个参数是Iterable<CharSequence>(这两个都是接口,所以List< string >之类的东西可以工作。所以你可以这样做:
String.join(",", serverIds);
同样在Java 8中,您可以使用新的StringJoiner类,用于您想要在有完整的元素列表之前开始构造字符串的场景。
另一种替代方法
for(String serverId : serverIds) {
sb.append(",");
sb.append(serverId);
}
sb.deleteCharAt(0);