【问题标题】:Removed comma from last while working with StringBuilder使用 StringBuilder 时删除了最后一个逗号
【发布时间】:2016-01-12 09:54:30
【问题描述】:

我有以下 Java 程序,我不想在我的最后一个元素之后分配“,”,该怎么办?

String range = "400-450";
        Integer startRange = null;
        Integer endRange = null;
        StringTokenizer st = new StringTokenizer(range,"-");  
        while(st.hasMoreTokens()) { 
            startRange = Integer.parseInt(st.nextToken()); 
            endRange= Integer.parseInt(st.nextToken()); 
        } 
        StringBuilder sb = new StringBuilder();
        for (int i = startRange; i <= endRange; i++) {
            sb.append(i).append(",");
        }
        System.out.println(sb);

输出应该是 400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450 --> 最后没有逗号

【问题讨论】:

    标签: java stringbuilder stringbuffer


    【解决方案1】:

    对于 Java 8,您可以切换到新类 StringJoiner正是为了这个目的而添加的

        StringJoiner sb = new StringJoiner(",");
        for (int i = startRange; i <= endRange; i++) {
            sb.add(String.valueOf(i));
        }
        System.out.println(sb.toString());
    

    手动操作,我建议在项目前添加逗号 ,然后使用 substring(1):

        for (int i = startRange; i <= endRange; i++) {
            sb.append(",").append(i);
        }
        //Check for empty before!
        System.out.println(sb.substring(1));
    

    【讨论】:

    • 这不会编译,因为 StringJoiner.add() 需要 CharSequence 而不是整数。你需要sb.add(String.valueOf(i));
    【解决方案2】:

    正如@Jan 所说,如果您有Java8,请使用StringJoiner。否则,您可以在新条目之前添加一个分隔符,并通过将分隔符初始化为空白来区别对待第一项。

       String separator = "";
        for (int i = startRange; i <= endRange; i++) {
            sb.append(separator).append(i);
            separator = ",";
        }
    

    这是Java8版本

        StringJoiner sb = new StringJoiner(",");
        for (int i = startRange; i <= endRange; i++) {
            sb.add(String.valueOf(i));
        }
    

    【讨论】:

      【解决方案3】:

      就这么简单

      for (int i = startRange; i <= endRange; i++) {
         sb.append(i);
         if(i != endRange)
              sb.append(",");
      }
      

      【讨论】:

        【解决方案4】:

        使用 Joiner (guava) for Java

        List<Integer> numbers = Lists.newArrayList(1, 3, 4, 5, 23);
        System.out.println(Joiner.on(",").join(numbers));
        

        输出是:

        1,3,4,5,23

        【讨论】:

          【解决方案5】:

          在到达最后一个元素之前让最后一个附加逗号的循环停止:

          String range = "400-450";
                  Integer startRange = null;
                  Integer endRange = null;
                  StringTokenizer st = new StringTokenizer(range,"-");  
                  while(st.hasMoreTokens()) { 
                      startRange = Integer.parseInt(st.nextToken()); 
                      endRange= Integer.parseInt(st.nextToken()); 
                  } 
                  StringBuilder sb = new StringBuilder();
                  // here, the "<=" was changed to "<"
                  for (int i = startRange; i < endRange; i++) {
                      sb.append(i).append(",");
                  }
                  // append last element
                  sb.append(endrange)
                  System.out.println(sb);
          

          【讨论】:

          • 最后还是逗号(,),我不要那个
          • 感谢您的提示!请参阅倒数第二行进行更正!
          【解决方案6】:

          您在每个i 之后附加"," 仅当您未达到 endRange 时才尝试附加 ","

          做:

          for (int i = startRange; i <= endRange; i++) {
                      sb.append(i)
                      if (i != endRange)
                        sb.append(",");
                  }
          

          这样"," 不会在最后一个数字之后添加到 sb。

          【讨论】:

          • 请不要只发布代码 - 添加解释为什么这样可以解决问题。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-11-14
          • 1970-01-01
          • 1970-01-01
          • 2012-12-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多