簡體   English   中英

重寫Arrays.toString()方法

[英]Overriding Arrays.toString() Method

我只是想知道,是否可以覆蓋類java.util.Arrays的toString()方法。 我正在我們的課上制作一個項目,我計划輸出我的數組而不是

[33,12,98]至[033,012,098]

我只是想知道是否可以在不重寫Arrays.toString()方法的情況下這樣做。

謝謝您的幫助 :)

你不能覆蓋 Arrays.toString()。 相反,您可以通過附加前導0來編寫自己的泛型方法,例如:

public static <T> String toString(T arr[]) {
    return Arrays.stream(arr).map(s -> "0" + s).collect(Collectors.joining(", ", "[", "]"));
}

簡單地稱之為:

Integer arr[] = {13, 14, 15};
System.out.println(toString(arr));

如果你正在處理一個原始數據類型(假設這里只有一個int ),那么toString()看起來像:

public static String toString(int arr[]) {
   return Arrays.stream(arr).mapToObj(s -> "0" + s)
                            .collect(Collectors.joining(", ", "[", "]"));
}

正如其他人已經提到的那樣,不可能覆蓋Arrays.toString 解決方案是編寫自己的代碼來創建字符串,例如使用Java 8流:

int[] array = { 33, 12, 98 };
String result = 
      Arrays.stream(array)                            // stream of ints
            .boxed()                                  // converted to Integers
            .map(String::valueOf)                     // converted to String
            .map(s -> StringUtils.leftPad(s, 3, "0")) // left-padded
            .collect(Collectors.joining(", ", "[", "]"));       // appended together with , as separator


Assert.assertEquals("[033, 012, 098]", result);

如果你想要一個填充前導零的固定寬度字段,你可以使用String.format()和格式符號,如%03d ,只使用標准的Java庫。

例如:

static String toString(int[] array) {
    return Arrays.stream(array)
            .mapToObj(i -> String.format("%03d", i))    // <-- Format
            .collect(Collectors.joining(", ", "[", "]"));
}

使用下面的輸入,結果是[033,012,098,123,001]

public static void main(String[] args) {
    int[] myarray = new int[] { 33, 12, 98, 123, 1 };
    String s = toString(myarray);
    System.out.println(s);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM