【问题标题】:StringBuilder remove comma at the end of Last record [duplicate]StringBuilder 删除最后一条记录末尾的逗号 [重复]
【发布时间】:2015-11-14 00:43:16
【问题描述】:

我正在使用 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();

【问题讨论】:

  • 返回的 String 的 subString 或调用 deleteCharAt(...) 传入 StringBuilder 长度 - 1。
  • if (i == arrayList.size () -1) 省略逗号怎么样
  • 考虑String::join
  • 添加后有什么具体原因要删除吗?为什么不阻止它被添加到最后一项本身?

标签: java stringbuilder


【解决方案1】:

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()));

【讨论】:

  • 或者只是return String.join(",", list.stream().map(e -&gt; e.getName() + "-" + e.getPrice()).collect(toList()));
  • import static java.util.stream.Collectors.*;
  • 谢谢!刚刚编辑了答案。
【解决方案2】:
int index = stringBuilder.lastIndexOf(",");
if (index != -1){
    stringBuilder.replace(index, index+1, "");
}
String stringFinal = stringBuilder.toString();

【讨论】:

    【解决方案3】:

    你可以只删除最后一个字符:

     stringBuilder.deleteCharAt(stringBuilder.length()-1);
     stringFinal = stringBuilder.toString();
    

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

    【讨论】:

      【解决方案4】:

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

              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();
      

      【讨论】:

        【解决方案5】:
            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();
        

        【讨论】:

          【解决方案6】:

          或者循环直到 size - 1 然后在 wards 之后添加最后一个元素,不带逗号。

          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();
          

          【讨论】:

            【解决方案7】:

            为最后一项添加检查。

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

            或:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-11-23
              • 2019-01-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多