StringBuilder删除最后一条记录末尾的逗号

7
我正在使用StringBuilder在记录之间显示逗号,但同时也会在最后一个记录后面得到逗号。
如何控制这个问题?我不想看到最后一个记录后面的逗号 - 因为它是无用的。
   for (int i = 0; i < arrayList.size(); i++) {

        String name = arrayList.get(i).getName();
        int price = arrayList.get(i).getPrice();

        stringBuilder.append(strName);
        stringBuilder.append(" - "+price+",");

    }

        stringFinal = stringBuilder.toString();

1
可以使用subString函数截取返回的字符串,或者调用deleteCharAt(...)函数并传入StringBuilder长度减1的参数。 - Hovercraft Full Of Eels
1
如果 (i == arrayList.size() - 1),则省略逗号,你觉得怎么样? - user
2
请考虑使用 String::join - khelwood
你有特别的原因想要在添加后将其删除吗?为什么不在最后一个项目本身就防止它被添加呢? - Mohit Kanwar
7个回答

10

Java 8 解决方案

如果使用 Java 8,您无需进行任何检查。您只需要使用 StringJoiner(或 String.join())即可。

StringJoiner joiner = new StringJoiner(",");
for (int i = 0; i < arrayList.size(); i++) {
    String name = arrayList.get(i).getName();
    int price = arrayList.get(i).getPrice();

    joiner.add(strName + " - " + price);
}
String joinedString = joiner.toString();

你可以利用Stream API(感谢@Sasha)进一步简化代码:

String joinedString = String.join(",", list.stream().map(
        e -> e.getName() + " - " + e.getPrice()).collect(Collectors.toList()));

4

增加对最后一个项目的检查。

if (i < arrayList.size() - 1) {
  stringBuilder.append(" - "+price+",");
} else {
  stringBuilder.append(" - "+price);
}

或者:

stringBuilder.append(" - "+price);
if (i < arrayList.size() - 1) {
  stringBuilder.append(",");
}

2
您可以直接删除最后一个字符:
 stringBuilder.deleteCharAt(stringBuilder.length()-1);
 stringFinal = stringBuilder.toString();

那将是最简单的解决方案。

1
int index = stringBuilder.lastIndexOf(",");
if (index != -1){
    stringBuilder.replace(index, index+1, "");
}
String stringFinal = stringBuilder.toString();

0
或者循环直到 size - 1,然后在最后一个元素之后添加而不带逗号。
int i = 0, price = 0;
String name = null;
for (i = 0; i < arrayList.size() - 1; i++) {
 name = arrayList.get(i).getName();
 price = arrayList.get(i).getPrice();

 stringBuilder.append(strName);
 stringBuilder.append(" - "+price+",");
}

name = arrayList.get(i).getName();
price = arrayList.get(i).getPrice();
stringBuilder.append(strName);
stringBuilder.append(" - "+price);
stringFinal = stringBuilder.toString();

0
    for (int i = 0; i < arrayList.size(); i++) {

    String name = arrayList.get(i).getName();
    int price = arrayList.get(i).getPrice();

    stringBuilder.append(strName);
    if(i== arrayList.size()-1)
       stringBuilder.append(" - "+price);
    else
    stringBuilder.append(" - "+price+",");

     }

    stringFinal = stringBuilder.toString();

0

你可以将它写在前面,而不是放在最后:

        String name = arrayList.get(0).getName();
        int price = arrayList.get(0).getPrice();

        stringBuilder.append(strName).append(" - "+price);
for (int i = 1; i < arrayList.size(); i++) {

        name = arrayList.get(i).getName();
        price = arrayList.get(i).getPrice();

        stringBuilder.append(","+strName).append(" - "+price);

    }

        stringFinal = stringBuilder.toString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接