Переопределение метода Arrays.toString () - PullRequest
4 голосов
/ 20 марта 2019

Мне просто интересно, можно ли переопределить метод toString () класса java.util.Arrays.Я делаю проект для нашего класса и планирую выводить свои массивы вместо

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

Мне просто интересно, возможно ли это сделать без переопределения метода Arrays.toString ().

Спасибо за вашу помощь:)

Ответы [ 3 ]

9 голосов
/ 20 марта 2019

Вы не можете переопределить 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(", ", "[", "]"));
}
3 голосов
/ 20 марта 2019

Если вы хотите, чтобы поле фиксированной ширины заполнялось начальными нулями, вы можете использовать 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);
}
3 голосов
/ 20 марта 2019

Как уже упоминалось, перезапись 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);
...