【问题标题】:Java - Printing commas in a loop [duplicate]Java - 在循环中打印逗号[重复]
【发布时间】:2017-11-29 01:46:18
【问题描述】:

我遇到了这个问题,如果想遍历一个数组并打印出用逗号分隔的内容,它会在最后打印出一个额外的内容。 我进行了一些搜索,但找不到适合这种情况的答案。

代码:

public String toString(){

    String hold= "";
    for(int i = 0; i < array.length; i ++){

        if(array[i] == true){
            hold + = i;
            if(i != array.length-1)
                hold+= ",";
        }
    }
    return hold;
}

【问题讨论】:

  • 只检查当前迭代是否是最后一个,如: if (i == arr.length - 1) System.out.print(element);否则 System.out.print(element + ", ");
  • 对于偶尔的循环,我使用一个布尔值,它在第一个循环上设置并在每个其他循环上插入一个逗号。但是我最近一直在编写一个代码生成器,这种模式出现了很多,所以我创建了一个类来表示它。内部是维护和布尔值,以确定它的“打印”方法是否被多次调用。只有这样它才会输出所需的值(在构造函数中传递)。

标签: java arrays loops output


【解决方案1】:

在 Java 8 中,您根本不需要这个: 如果它的字符串数组,那么以下将为您提供您想要实现的相同目标。

String joined = String.join(",", name);

how-to-convert-array-to-comma-separated-string

Java 8 的另一种方式是

List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7);

    System.out.println(numbers.stream()
        .map(number -> String.valueOf(number))
        .collect(toStringJoiner(", ")));

【讨论】:

    【解决方案2】:

    也许最后一个 array[i] 不是 true 所以你的逻辑测试

    if(i != array.length-1)
    

    没有进入。

    但无论如何只需替换

    if(hold.endsWith (","){
      hold = hold.substring (0, hold.length()-1);
    }
    

    【讨论】:

      【解决方案3】:

      在循环之后检查它是否以逗号结尾

      for(whatever){
        whatever
      }
      if(hold.endsWith(","){
        hold = hold.substring(0,hold.length()-1);
      }
      

      编辑:

      String arrayString = Arrays.toString(my_array)
      arrayString = arrayString.substring(1,arrayString.length()-1) // gets rid of the '[]'
      

      【讨论】:

      • 谢谢。但我正在寻找一种一开始甚至不生成逗号的方法
      • 我添加了一种不同的方法
      【解决方案4】:

      试试这个

            public String toString(){
                  String hold= "";
                  for(int i = 0; i < array.length; i ++){
      
                      if(array[i] == true){
                          if (i != 0) {
                              hold += ",";
                          }
                          hold += i;
                          // if(i != array.length-1) {
                          //   hold+= ",";
                          // }
                      }
                  }
                  return hold;
              }
      

      【讨论】:

        【解决方案5】:

        希望这会有所帮助 (您可以抓住逻辑并与您的代码集成)

        String op = "";
        for (int i = 0; i < arr.length; i++) {
            op += i != 0 ? ", " + arr[i] : arr[i];
        }
        

        【讨论】:

          【解决方案6】:

          使用 Java 8 非常简单:

          String[] values={"foo", "bar", "baz"};
          
          public String toString(){
              return Arrays.stream(values).collect(Collectors.joining(", "));
          }
          

          pre-Java 8 我会采用这种冗长的方式:

          public String toString(){
              StringBuilder sb = new StringBuilder();
              Iterator<String> iterator = Arrays.asList(values).iterator();
              if(iterator.hasNext()){
                  sb.append(iterator.next());
                  while(iterator.hasNext()){
                      sb.append(", ").append(iterator.next());
                  }
              }
              return sb.toString();
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-11-22
            • 1970-01-01
            • 1970-01-01
            • 2020-10-27
            • 1970-01-01
            • 2017-12-19
            • 1970-01-01
            相关资源
            最近更新 更多