繁体   English   中英

JAVA 连接双精度数组 => 字符串(特殊格式)

[英]JAVA concatenating double array => String(with special format)

如何格式化字符串以将双精度数组转换为以下形式: [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()方法,但是我不允许在这个项目中使用它。

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

您可以 stream data数组并让Collectors.joining完成繁重的工作:

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

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

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

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

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

只需检查数组的长度是否大于等于 1,然后将其与 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 + "]";
}

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

       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 + "]";
    }

只需添加一个 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 + "]";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM