【问题标题】:JAVA concatenating double array => String(with special format)JAVA连接双数组=>字符串(特殊格式)
【发布时间】:2021-07-06 05:48:01
【问题描述】:

如何格式化字符串以将双精度数组转换为:[0.0, 2.4, 5.5, 6.3]

我将双数组元素分配给一个字符串以具有上述格式的字符串表示形式。

我将双数组更改为单个字符串表示的代码:

public String toString() {
    String toString="[";
     for(int i=0; i<data.length; i++) {
         toString = toString + data[i] + ", ";
      }
    return toString + "]";
}

我得到的数组格式为 [0.0, 2.4, 5.5, 6.3, ],这不是预期的,也是错误的。

如何将其格式化为 [0.0, 2.4, 5.5, 6.3]?

我曾尝试使用Arrays.toString() 方法,但是我不能在这个项目中使用它。

我应该如何更改我的代码以获得所需的格式?

【问题讨论】:

  • 如果数组中没有更多元素,您可以修复结果字符串或引入一些逻辑以避免打印 ','。检查 String 类的子字符串和替换方法。

标签: java arrays string for-loop concatenation


【解决方案1】:

您可以流式传输 data 数组并让 Collectors.joining 完成繁重的工作:

@Override
public String toString() {
    return Arrays.stream(data)
                 .mapToObj(Double::toString).collect(Collectors.joining(", ", "[", "]"));
}

编辑:
如果你不能流式传输数组,你可以自己迭代它并对第一个元素进行特殊处理,这是唯一没有以逗号开头的元素:

@Override
public String toString() {
    StringBuilder sb = new StringBuilder("[");
    if (data.length > 0) {
        sb.append(data[0]);
    }
    for (int i = 1; i < data.length; ++i) {
        sb.append(", ").append(data[i]);
    }
    sb.append("]");
    return sb.toString();
}

【讨论】:

  • 感谢您的建议,但不允许使用 JDK 辅助方法....
【解决方案2】:

只要检查一个数组的长度,如果它大于等于一,然后将它与 toString 连接,然后从索引 1 开始遍历并返回它。

 public String toString() {
    String toString="[";
    //check length of an array
     if(data.length >= 1){
        toString += data[0];
     }
    //start from 1st index
    for(int i=1; i<data.length; i++) {
        toString += ", " + data[i];
    }
    return toString + "]";
}

【讨论】:

    【解决方案3】:

    您可以在数组的最后一个元素之前停止循环,然后手动将最后一个元素添加到结果中的字符串。像这样:

    if (data.length == 0) {
      return "[]";
    }
    
    int lastElementIndex = data.length - 1;
    String result = "[";
    
    for (int i = 0; i < lastElementIndex; i++) {
      result += data[i] + ", "; 
    // or result += String.format("%.1f, ", data[i]); if you are allowed
    }
    
    return result + data[lastElementIndex] + "]"; 
    // or String.format("%s%.1f]", result, data[lastElementIndex]);
    

    【讨论】:

    • @IanSeol 我在返回语句和 cmets 中改进了我的答案。我还添加了一个空数组检查。
    【解决方案4】:

    为什么不只检查你是否在最后一个元素上,然后不添加,

           public String toString2(double[] data) {
            String toString = "[";
            for (int i = 0; i < data.length; i++) {
                if (i == data.length - 1) {
                    toString = toString + data[i];
                } else {
                    toString = toString + data[i] + ", ";
                }
            }
            return toString + "]";
        }
    

    【讨论】:

      【解决方案5】:

      只需添加一个 if 块来检查最后一个元素:

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

      或者在除第一个元素之外的元素之前添加分隔符

      public String toString() {
          String separator = "";
          String toString = "[";
          for (int i = 0; i < data.length; i++) {
              toString = toString + separator;
              toString = toString + data[i];
              separator = ", ";
          }
          return toString + "]";
      }
      

      【讨论】:

        猜你喜欢
        • 2015-11-27
        • 1970-01-01
        • 1970-01-01
        • 2020-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-09
        • 2016-01-14
        相关资源
        最近更新 更多