重写 Arrays.toString() 方法



我只是想知道,是否可以覆盖 java.util.Array 类的 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);
}

最新更新