Java 重写Arrays.toString()方法

Java 重写Arrays.toString()方法,java,arrays,overriding,tostring,Java,Arrays,Overriding,Tostring,我只是想知道,是否可以重写类java.util.array的toString()方法。我正在班上做一个项目,我计划输出我的数组,而不是 [33,12,98]至[033,012,098] 我只是想知道是否可以在不重写array.toString()方法的情况下实现这一点 感谢您的帮助:)您无法覆盖数组。toString()。相反,您可以通过添加前导0来编写自己的泛型方法,如: public static <T> String toString(T arr[]) { return

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

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

我只是想知道是否可以在不重写array.toString()方法的情况下实现这一点


感谢您的帮助:)

您无法覆盖数组。toString()。相反,您可以通过添加前导0来编写自己的泛型方法,如:

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

如果您处理的是一个基本数据类型(这里假设只有
int
),那么toString()将如下所示:

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

正如其他人已经提到的,不可能覆盖
数组.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(", ", "[", "]"));
}

只需在您自己的类中编写该方法,并调用该方法而不是array.toString()。为什么要让方法Arrays.toString()执行其文档中所述的功能之外的其他功能?覆盖的意思是覆盖。幸运的是,这是不可能的。只需相应地用前导零填充内容并按原样打印数组。由于数组是静态的,因此无法覆盖,也不需要它-通常不会自动调用此方法,因此您可以调用任何其他方法(为此而创建)。或者
Arrays.stream($1).mapToObj(i->String.format(“%03d”,i)).collect(collector.joining(“,”,“[”,“])
这需要依赖于Apache commons。是的,确实如此。当然,如果这是一个问题,可以选择String.format(“%03d”)。我个人更喜欢Apache Commons StringUtils.leftPad或Guava Strings.padStart函数。您应该使用@Andreas:是的,没错。您应该使用。不需要
StringBuilder
static String toString(int[] array) {
    return Arrays.stream(array)
            .mapToObj(i -> String.format("%03d", i))    // <-- Format
            .collect(Collectors.joining(", ", "[", "]"));
}
public static void main(String[] args) {
    int[] myarray = new int[] { 33, 12, 98, 123, 1 };
    String s = toString(myarray);
    System.out.println(s);
}