Вопрос-ответ

What's the simplest way to print a Java array?

Какой самый простой способ распечатать массив Java?

В Java массивы не переопределяются toString(), поэтому, если вы попытаетесь напечатать один из них напрямую, вы получите className + '@' + шестнадцатеричное значение hashCode массива, как определено в Object.toString():

int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // Prints something like '[I@3343c8b3'

Но обычно нам на самом деле хотелось бы чего-то большего, чем [1, 2, 3, 4, 5]. Какой самый простой способ сделать это? Вот несколько примеров входных и выходных данных:

// Array of primitives:
int[] intArray = new int[] {1, 2, 3, 4, 5};
// Output: [1, 2, 3, 4, 5]

// Array of object references:
String[] strArray = new String[] {"John", "Mary", "Bob"};
// Output: [John, Mary, Bob]
Переведено автоматически
Ответ 1

Начиная с Java 5, вы можете использовать Arrays.toString(arr) или Arrays.deepToString(arr) для массивов внутри массивов. Обратите внимание, что Object[] version вызывает .toString() для каждого объекта в массиве. Выходные данные даже оформлены именно так, как вы просите.

Примеры:


  • Простой массив:


    String[] array = new String[] {"John", "Mary", "Bob"};
    System.out.println(Arrays.toString(array));

    Вывод:


    [John, Mary, Bob]


  • Вложенный массив:


    String[][] deepArray = new String[][] {{"John", "Mary"}, {"Alice", "Bob"}};
    // Gives undesired output:
    System.out.println(Arrays.toString(deepArray));
    // Gives the desired output:
    System.out.println(Arrays.deepToString(deepArray));

    Вывод:


    [[Ljava.lang.String;@106d69c, [Ljava.lang.String;@52e922]
    [[John, Mary], [Alice, Bob]]


  • double Массив:


    double[] doubleArray = { 7.0, 9.0, 5.0, 1.0, 3.0 };
    System.out.println(Arrays.toString(doubleArray));

    Вывод:


    [7.0, 9.0, 5.0, 1.0, 3.0 ]


  • int Массив:


    int[] intArray = { 7, 9, 5, 1, 3 };
    System.out.println(Arrays.toString(intArray));

    Вывод:


    [7, 9, 5, 1, 3 ]


Ответ 2

Сначала всегда проверяйте стандартные библиотеки.

import java.util.Arrays;

Тогда попробуйте:

System.out.println(Arrays.toString(array));

или если ваш массив содержит другие массивы в качестве элементов:

System.out.println(Arrays.deepToString(array));
Ответ 3

Это приятно знать, однако, что касается "всегда сначала проверяйте стандартные библиотеки", я бы никогда не наткнулся на трюк Arrays.toString( myarray )

--поскольку я сосредоточился на типе myarray, чтобы посмотреть, как это сделать. Я не хотел проходить через это: я хотел простой вызов, чтобы результат был похож на то, что я вижу в отладчике Eclipse, а myarray.toString() просто не делал этого.

import java.util.Arrays;
.
.
.
System.out.println( Arrays.toString( myarray ) );
Ответ 4

В JDK1.8 вы можете использовать агрегатные операции и лямбда-выражение:

String[] strArray = new String[] {"John", "Mary", "Bob"};

// #1
Arrays.asList(strArray).stream().forEach(s -> System.out.println(s));

// #2
Stream.of(strArray).forEach(System.out::println);

// #3
Arrays.stream(strArray).forEach(System.out::println);

/* output:
John
Mary
Bob
*/

java arrays