Pertanyaan Apa cara paling sederhana untuk mencetak array Java?


Di Java, array tidak diganti toString(), jadi jika Anda mencoba untuk mencetak satu secara langsung, Anda mendapatkan className + @ + hex dari hashCode dari array, sebagaimana didefinisikan oleh Object.toString():

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

Tetapi biasanya kita sebenarnya menginginkan sesuatu yang lebih seperti itu [1, 2, 3, 4, 5]. Apa cara paling sederhana untuk melakukan itu? Berikut beberapa contoh input dan output:

// 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]

1526
2018-01-03 20:39


asal


Jawaban:


Karena Java 5 dapat Anda gunakan Arrays.toString(arr) atau Arrays.deepToString(arr) untuk array dalam array. Perhatikan bahwa Object[] panggilan versi .toString() pada setiap objek dalam array. Outputnya bahkan didekorasi dengan cara yang tepat seperti yang Anda minta.

Contoh:

Array Sederhana:

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

Keluaran:

[John, Mary, Bob]

Nested Array:

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));

Keluaran:

[[John, Mary], [Alice, Bob]]

double Larik:

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

Keluaran:

[7.0, 9.0, 5.0, 1.0, 3.0 ]

int Larik:

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

Keluaran:

[7, 9, 5, 1, 3 ]

2035
2018-01-03 20:48



Selalu periksa pustaka standar terlebih dahulu. Mencoba:

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

atau jika array Anda mengandung array lain sebagai elemen:

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

304
2018-05-12 21:01



Ini bagus untuk diketahui, namun, seperti "selalu periksa perpustakaan standar terlebih dahulu" Saya tidak akan pernah menemukan triknya Arrays.toString( myarray )

--sejak saya berkonsentrasi pada jenis myarray untuk melihat bagaimana melakukan ini. Saya tidak ingin harus mengulangi melalui hal: Saya ingin panggilan mudah untuk membuatnya keluar mirip dengan apa yang saya lihat di Eclipse debugger dan myarray.toString () hanya tidak melakukannya.

import java.util.Arrays;
.
.
.
System.out.println( Arrays.toString( myarray ) );

85
2018-02-06 23:35



Di JDK1.8 Anda dapat menggunakan operasi agregat dan ekspresi lambda:

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
*/

70
2018-01-03 21:44



Jika Anda menggunakan Java 1.4, Anda dapat melakukan:

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

(Ini bekerja di 1.5+ juga, tentu saja.)


37
2017-12-23 18:51



Dimulai dengan Java 8, seseorang juga bisa memanfaatkan join() metode yang disediakan oleh Kelas String untuk mencetak elemen larik, tanpa tanda kurung, dan dipisahkan oleh pemisah pilihan (yang merupakan karakter ruang untuk contoh yang ditunjukkan di bawah):

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

Outputnya adalah "Hey there amigo!".


35
2017-10-05 19:13



Arrays.deepToString(arr) hanya mencetak pada satu baris.

int[][] table = new int[2][2];

Untuk benar-benar mendapatkan tabel untuk dicetak sebagai tabel dua dimensi, saya harus melakukan ini:

System.out.println(Arrays.deepToString(table).replaceAll("],", "]," + System.getProperty("line.separator")));

Sepertinya itu Arrays.deepToString(arr) metode harus mengambil string pemisah, tapi sayangnya tidak.


27
2018-03-11 05:36



Arrays.toString

Sebagai jawaban langsung, solusi yang disediakan oleh beberapa, termasuk @Esko, menggunakan Arrays.toString dan Arrays.deepToString metode, adalah yang terbaik.

Java 8 - Stream.collect (bergabung ()), Stream.forEach

Di bawah ini saya mencoba daftar beberapa metode lain yang disarankan, mencoba untuk meningkatkan sedikit, dengan penambahan yang paling penting adalah penggunaan Stream.collect operator, menggunakan joining  Collector, untuk meniru apa String.join sedang melakukan.

int[] ints = new int[] {1, 2, 3, 4, 5};
System.out.println(IntStream.of(ints).mapToObj(Integer::toString).collect(Collectors.joining(", ")));
System.out.println(IntStream.of(ints).boxed().map(Object::toString).collect(Collectors.joining(", ")));
System.out.println(Arrays.toString(ints));

String[] strs = new String[] {"John", "Mary", "Bob"};
System.out.println(Stream.of(strs).collect(Collectors.joining(", ")));
System.out.println(String.join(", ", strs));
System.out.println(Arrays.toString(strs));

DayOfWeek [] days = { FRIDAY, MONDAY, TUESDAY };
System.out.println(Stream.of(days).map(Object::toString).collect(Collectors.joining(", ")));
System.out.println(Arrays.toString(days));

// These options are not the same as each item is printed on a new line:
IntStream.of(ints).forEach(System.out::println);
Stream.of(strs).forEach(System.out::println);
Stream.of(days).forEach(System.out::println);

26
2018-06-19 06:10