Какой самый простой способ напечатать массив 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]

1787
задан Sae1962 7 July 2019 в 14:58
поделиться

11 ответов

Начиная с Java 5 можно использовать Arrays.toString(arr) или Arrays.deepToString(arr) для массивов в массивах. Обратите внимание что Object[] вызовы версии .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"}};
    System.out.println(Arrays.toString(deepArray));
    //output: [[Ljava.lang.String;@106d69c, [Ljava.lang.String;@52e922]
    System.out.println(Arrays.deepToString(deepArray));
    

    Вывод:

    [[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 ]
    
2391
ответ дан 13 revs, 12 users 22% 7 July 2019 в 14:58
поделиться

До Java 8

Мы могли бы использовать Arrays.toString(array) для печати одномерного массива и Arrays.deepToString(array) для многомерных массивов.

Java 8

Теперь у нас есть опция Stream и lambda для печати массива.

Печать одномерного массива:

public static void main(String[] args) {
    int[] intArray = new int[] {1, 2, 3, 4, 5};
    String[] strArray = new String[] {"John", "Mary", "Bob"};

    //Prior to Java 8
    System.out.println(Arrays.toString(intArray));
    System.out.println(Arrays.toString(strArray));

    // In Java 8 we have lambda expressions
    Arrays.stream(intArray).forEach(System.out::println);
    Arrays.stream(strArray).forEach(System.out::println);
}

Вывод:

[1, 2, 3, 4, 5]
[Джон, Мэри, Боб]
1
2
3
4
5
Джон
Мэри
Боб

Печать многомерного массива На всякий случай, если мы хотим напечатать многомерный массив, мы можем использовать Arrays.deepToString(array) as:

public static void main(String[] args) {
    int[][] int2DArray = new int[][] { {11, 12}, { 21, 22}, {31, 32, 33} };
    String[][] str2DArray = new String[][]{ {"John", "Bravo"} , {"Mary", "Lee"}, {"Bob", "Johnson"} };

    //Prior to Java 8
    System.out.println(Arrays.deepToString(int2DArray));
    System.out.println(Arrays.deepToString(str2DArray));

    // In Java 8 we have lambda expressions
    Arrays.stream(int2DArray).flatMapToInt(x -> Arrays.stream(x)).forEach(System.out::println);
    Arrays.stream(str2DArray).flatMap(x -> Arrays.stream(x)).forEach(System.out::println);
} 

Теперь необходимо отметить, что метод Arrays.stream(T[]), который в случае int[] возвращает нас Stream<int[]>, а затем метод flatMapToInt() отображает каждый элемент потока с содержимым отображенного потока, полученного путем применения предоставленной функции отображения к каждому элементу.

Вывод:

[[11, 12], [21, 22], [31, 32, 33]]
[[Джон, Браво], [Мэри, Ли], [Боб, Джонсон]]
11
12
21
22
31
32
33
Джон
Браво
Мэри
Ли
Боб
Джонсон

30
ответ дан i_am_zero 7 July 2019 в 14:58
поделиться

Он всегда должен работать независимо от того, какую версию JDK вы используете:

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

Он будет работать, если Array содержит объекты. Если Array содержит типы примитивов, вы можете использовать классы-обертки, вместо этого сохраняя примитив непосредственно как ..

Пример:

int[] a = new int[]{1,2,3,4,5};

Заменить на:

Integer[] a = new Integer[]{1,2,3,4,5};

Обновление:

Да! Следует отметить, что преобразование массива в массив объектов или использование массива объектов является дорогостоящим и может замедлить выполнение. это происходит по природе Java называется автобоксом.

Так что только в целях печати, он не должен использоваться. мы можем сделать функцию, которая принимает массив в качестве параметра и печатает желаемый формат как

public void printArray(int [] a){
        //write printing code
} 
7
ответ дан Girish Kumar 7 July 2019 в 14:58
поделиться

Использование обычного цикла для цикла , на мой взгляд, является самым простым способом печати массива. Здесь у вас есть пример кода, основанный на вашем intArray

for (int i = 0; i < intArray.length; i++) {
   System.out.print(intArray[i] + ", ");
}

. Он дает выходные данные как ваши 1, 2, 3, 4, 5

.
12
ответ дан Andrew_Dublin 7 July 2019 в 14:58
поделиться
for(int n: someArray) {
    System.out.println(n+" ");
}
19
ответ дан Ashish Aggarwal 7 July 2019 в 14:58
поделиться

Есть еще один способ, если ваш массив имеет тип char []:

char A[] = {'a', 'b', 'c'}; 

System.out.println(A); // no other arguments

print

abc
5
ответ дан Roam 7 July 2019 в 14:58
поделиться

В 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
*/
83
ответ дан Yassin Hajaj 7 July 2019 в 14:58
поделиться

Начиная с Java 8, можно также использовать метод join(), предоставляемый классом String , чтобы распечатывать элементы массива без скобок и разделять их выбранным разделителем (который является пробел для примера, показанного ниже):

String[] greeting = {"Hey", "there", "amigo!"};
String delimiter = " ";
String.join(delimiter, greeting) 

Вывод будет «Привет, амиго!».

38
ответ дан laylaylom 7 July 2019 в 14:58
поделиться

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

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

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

System.out.println(Arrays.deepToString(array));
336
ответ дан Limbic System 7 July 2019 в 14:58
поделиться

При использовании Java 1.4 можно вместо этого сделать:

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

(Это работает в 1,5 + также, конечно.)

40
ответ дан Ross 7 July 2019 в 14:58
поделиться

toString является способом преобразовать массив для строкового представления.

кроме того, можно использовать:

for (int i = 0; i < myArray.length; i++){
System.out.println(myArray[i] + " ");
}

Это для цикла позволит Вам распечатать каждое значение своего массива в порядке.

0
ответ дан 22 November 2019 в 20:06
поделиться