Apa's cara yang paling sederhana untuk mencetak Java array?
Di Jawa, array don't menimpa toString()
, jadi jika anda mencoba untuk mencetak satu secara langsung, anda mendapatkan className
+ '@' + hex dari kode hash
array, seperti yang didefinisikan oleh Objek.toString()
:
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // prints something like '[I@3343c8b3'
Tapi biasanya, kita'd benar-benar ingin sesuatu yang lebih seperti[1, 2, 3, 4, 5]
. Apa's cara yang paling sederhana untuk melakukan itu? Berikut ini adalah 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]
1838
33
Sejak Jawa 5 anda dapat menggunakan
Array.toString(arr)
atauArray.deepToString(arr)
untuk array dalam array. Perhatikan bahwaObject [] versi
panggilan.toString()
pada masing-masing objek di dalam array. Output bahkan dihiasi dengan cara yang tepat anda'kembali bertanya.Contoh:
Sederhana Array:
String[] array = new String[] {"John", "Mary", "Bob"}; Sistem.keluar.println(Arrays.toString(array));
Output:
[Yohanes, Maria, Bob]
Bersarang Array:
String[][] deepArray = new String[][] {{"John", "Mary"}, {"Alice", "Bob"}}; Sistem.keluar.println(Arrays.toString(deepArray)); //output: [[Ljava.lang.String;@106d69c, [Ljava.lang.String;@52e922] Sistem.keluar.println(Arrays.deepToString(deepArray));
Output:
[[Yohanes, Maria], [Alice, Bob]]
double
Array:double[] doubleArray = { 7.0, 9.0, 5.0, 1.0, 3.0 }; Sistem.keluar.println(Arrays.toString(doubleArray));
Output:
[7.0, 9.0, 5.0, 1.0, 3.0 ]
int
Array:int[] intArray = { 7, 9, 5, 1, 3 }; Sistem.keluar.println(Arrays.toString(intArray));
Output:
[7, 9, 5, 1, 3 ]
Selalu memeriksa standar perpustakaan pertama. Coba:
atau jika array berisi array lain sebagai unsur-unsur:
Ini bagus untuk mengetahui, namun, seperti untuk "selalu memeriksa standar perpustakaan pertama" aku'd pernah tersandung pada trik
Array.toString( myarray )
Di JDK1.8 anda dapat menggunakan agregat operasi dan lambda expression:
Jika anda're menggunakan Java 1.4, anda malah bisa lakukan:
(Ini bekerja di 1.5+ juga, tentu saja.)
Dimulai dengan Java 8, salah satu juga dapat mengambil keuntungan dari
join()
metode yang disediakan oleh String kelas untuk mencetak elemen array tanpa tanda kurung dan dipisahkan oleh pembatas pilihan (yang merupakan karakter ruang untuk contoh yang ditunjukkan di bawah ini):Output akan menjadi "Hey amigo!".
Array.toString
Sebagai jawaban langsung, solusi yang ditawarkan oleh beberapa, termasuk @Eskomenggunakan
Arrays.toString
danArrays.deepToString
metode, adalah hanya yang terbaik.Jawa 8 - Stream.mengumpulkan(bergabung()), Aliran.forEach
Di bawah ini saya mencoba untuk daftar beberapa metode lain yang disarankan, mencoba untuk meningkatkan sedikit, dengan yang paling penting selain menjadi penggunaan
Stream.collect
operator, menggunakanjoining
Kolektor
, untuk meniru apaString.bergabung
lakukan.Sebelum ke Jawa 8
Kita bisa menggunakan
Array.toString(array)
untuk mencetak satu dimensi array dan Array.deepToString(array)` untuk array multi-dimensi.Jawa 8
Sekarang kita punya pilihan
Aliran
danlambda
untuk mencetak array.Mencetak Satu dimensi Array:
Output adalah:
Pencetakan Multi-dimensi Array Hanya dalam kasus kami ingin mencetak multi-dimensi array kita dapat menggunakan
Array.deepToString(array)
sebagai:Sekarang titik untuk mengamati adalah bahwa metode
Array.stream(T[])
, yang dalam kasusint[]
kembali kitaArus<int[]>
dan kemudian metodeflatMapToInt()
peta masing-masing elemen dari aliran dengan isi yang dipetakan stream diproduksi dengan menerapkan disediakan pemetaan fungsi untuk masing-masing elemen.Output adalah:
Array.deepToString(arr)
hanya mencetak pada satu baris.Untuk benar-benar mendapatkan meja untuk mencetak dua dimensi meja, aku harus melakukan ini:
Sepertinya `Array.deepToString(arr) metode harus mengambil string pemisah, tapi sayangnya itu doesn't.
Cara yang berbeda untuk Mencetak Array dalam Java:
Daftar list = new ArrayList(); daftar.tambahkan(""); daftar.tambahkan("Dua"); daftar.tambahkan("Tiga"); daftar.tambahkan("Empat"); // Cetak daftar di konsol Sistem.keluar.println(klik disini);
toString()
String[] array = new String[] { "", "Dua", "Tiga", "Empat" }; Sistem.keluar.println(Arrays.toString(array));
String[] arr1 = new String[] { "Kelima", "Keenam" }; String[] arr2 = new String[] { "Ketujuh", "Delapan" }; String[][] arrayOfArray = new String[][] { arr1, arr2 }; Sistem.keluar.println(arrayOfArray); Sistem.keluar.println(Arrays.toString(arrayOfArray)); Sistem.keluar.println(Arrays.deepToString(arrayOfArray));
Sumber: Akses Array
Menggunakan regular untuk ** loop adalah cara paling sederhana pencetakan array dalam pendapat saya. Di sini anda memiliki kode sampel berdasarkan intArray
Ini memberikan output sebagai milikmu 1, 2, 3, 4, 5
Di jawa 8 sangat mudah. ada dua kata kunci
Array.stream(intArray).forEach
::println
int[] intArray = new int[] {1, 2, 3, 4, 5}; Array.stream(intArray).forEach(Sistem.keluar::println);
Jika anda ingin mencetak semua elemen dalam array pada baris yang sama, maka cukup gunakan
cetak
bukanprintln
yaituCara lain tanpa referensi metode hanya menggunakan:
Itu harus selalu bekerja mana JDK versi yang anda gunakan:
Ini akan bekerja jika
Array
berisi benda-Benda. JikaArray
berisi tipe primitif, anda dapat menggunakan wrapper classes bukan menyimpan primitif langsung seperti..Contoh:
Ganti dengan:
Update :
Ya ! ini harus menyebutkan bahwa konversi array ke array objek ATAU untuk menggunakan Objek's hotel yang lebih mahal dan dapat memperlambat eksekusi. hal ini terjadi oleh alam jawa disebut autoboxing.
Jadi hanya untuk tujuan pencetakan, Itu tidak boleh digunakan. kita dapat membuat fungsi yang mengambil array sebagai parameter dan cetakan yang diinginkan format sebagai
Saya menemukan posting ini di Vanilla #Java baru-baru ini. It's sangat tidak nyaman menulis
Array.toString(arr);
, kemudian mengimporjawa.util.Array;
sepanjang waktu.Harap dicatat, ini bukan permanen memperbaiki dengan cara apapun. Hanya sebuah hack yang dapat membuat debugging sederhana.
Cetak array langsung memberikan representasi internal dan kode hash. Sekarang, semua kelas memiliki
Objek
sebagai induk-jenis. Jadi, mengapa tidak di-hackObjek.toString()
? Tanpa modifikasi, kelas Objek terlihat seperti ini:Bagaimana jika ini diubah menjadi:
Ini modded kelas mungkin hanya akan ditambahkan ke kelas jalan dengan menambahkan baris berikut ke baris perintah:
-Xbootclasspath/p:sasaran/kelas
.Sekarang, dengan ketersediaan
deepToString(..)
sejak Java 5,toString(..)
dapat dengan mudah diubah menjadideepToString(..)
untuk menambahkan dukungan untuk array yang berisi array lain.Saya menemukan ini menjadi sangat berguna hack dan itu akan menjadi besar jika Java hanya bisa tambahkan ini. Saya memahami potensi masalah dengan memiliki array yang sangat besar sejak string pernyataan bisa menjadi bermasalah. Mungkin lulus sesuatu seperti
Sistem.keluar d'or yang
PrintWriter` untuk meminimalisir resiko tersebut.Ada's salah satu cara tambahan jika anda array dengan tipe char[]:
cetakan
Anda bisa loop melalui array, mencetak masing-masing item, seperti yang anda loop. Misalnya:
Output:
Untuk menambah semua jawaban, percetakan objek sebagai string JSON adalah juga sebuah pilihan.
Menggunakan Jackson:
Menggunakan Gson:
Ada cara Berikut untuk mencetak Array
Untuk setiap loop juga dapat digunakan untuk mencetak elemen array: