重写Arrays.toString()方法

时间:2019-03-20 17:34:18

标签: java arrays override tostring

我只是想知道,是否可以重写类java.util.Arrays的toString()方法。我正在课堂上做一个项目,我计划输出数组而不是

  

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

我只是想知道是否可以在不重写Arrays.toString()方法的情况下做到这一点。

谢谢您的帮助:)

3 个答案:

答案 0 :(得分:9)

您不能覆盖 Arrays.toString()。相反,您可以通过添加前导0来编写自己的 generic 方法,例如:

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(", ", "[", "]"));
}

答案 1 :(得分:3)

正如其他人已经提到的那样,无法覆盖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);

答案 2 :(得分:3)

如果您想要一个用前导零填充的固定宽度字段,则可以仅使用标准Java库将String.format()与格式为%03d的符号一起使用。

例如:

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