簡體   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