Di Java, array tidak menimpa toString()
, jadi jika Anda mencoba untuk mencetaknya secara langsung, Anda mendapatkan className
+ '@' + hex dari hashCode
array, seperti yang didefinisikan oleh Object.toString()
:
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // prints something like '[I@3343c8b3'
Tapi biasanya, kami sebenarnya menginginkan sesuatu yang lebih seperti [1, 2, 3, 4, 5]
. Apa cara paling sederhana untuk melakukan itu? Berikut 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]
hashCode()
dalam heksadesimal. LihatObject#toString()
.Jawaban:
Karena Java 5 Anda dapat menggunakan
Arrays.toString(arr)
atauArrays.deepToString(arr)
untuk array dalam array. Perhatikan bahwaObject[]
versi ini memanggil.toString()
setiap objek dalam array. Outputnya bahkan didekorasi persis seperti yang Anda tanyakan.Contoh:
Array sederhana:
Keluaran:
Array bersarang:
Keluaran:
double
Himpunan:Keluaran:
int
Himpunan:Keluaran:
sumber
String[] array = {"John", "Mahta", "Sara"}
, dan kami ingin output ini tanpa braket dan koma:John Mahta Sara
?Arrays.deepToString()
hanya menerimaObject []
(atau array kelas yang diperluasObject
, sepertiInteger
, sehingga tidak akan bekerja pada array tipe primitifint []
. TetapiArrays.toString(<int array>)
berfungsi dengan baik untuk array primitif.System.out.println(String.join(" ", new String[]{"John", "Mahta", "Sara"}))
akan dicetakJohn Mahta Sara
.String.join(" ", "John", "Mahta", "Sara")
karena.join(...)
metode ini menggunakan array sebagai parameter vararg .Selalu periksa perpustakaan standar terlebih dahulu.
Lalu coba:
atau jika array Anda mengandung array lain sebagai elemen:
sumber
String[] array = {"John", "Mahta", "Sara"}
, dan kami ingin output ini tanpa braket dan koma:John Mahta Sara
?String.join(" ", Arrays.asList(array))
. docIni bagus untuk diketahui, karena, karena "selalu memeriksa perpustakaan standar dulu" saya tidak akan pernah menemukan trik
Arrays.toString( myarray )
--Karena saya berkonsentrasi pada jenis myarray untuk melihat bagaimana melakukan ini. Saya tidak ingin harus mengulangi hal itu: Saya ingin panggilan mudah untuk membuatnya keluar mirip dengan apa yang saya lihat di debugger Eclipse dan myarray.toString () hanya tidak melakukannya.
sumber
String[] array = {"John", "Mahta", "Sara"}
, dan kami ingin output ini tanpa braket dan koma:John Mahta Sara
?Di JDK1.8 Anda dapat menggunakan operasi agregat dan ekspresi lambda:
sumber
Arrays.stream(strArray).forEach(System.out::println);
System.out::println
yang merupakan referensi metode Java 8. Kode Anda menghasilkan lambda yang tidak perlu.Arrays.asList
dan lakukanArrays.stream(strArray).forEach(System.out::println)
Stream.of
adalah dengan melakukannya.skip(n).limit(m)
. Implementasi saat ini tidak mengembalikan aliran SIZED sedangkanArrays.stream(T[], int, int)
, menghasilkan kinerja pemisahan yang lebih baik jika Anda ingin melakukan operasi secara paralel. Juga jika Anda memilikiint[]
, Anda dapat secara tidak sengaja menggunakanStream.of
yang akan mengembalikanStream<int[]>
elemen tunggal, sementaraArrays.stream
akan memberi Anda secaraIntStream
langsung.Dimulai dengan Java 8, kita juga bisa memanfaatkan
join()
metode yang disediakan oleh kelas String untuk mencetak elemen array, tanpa tanda kurung, dan dipisahkan oleh pembatas pilihan (yang merupakan karakter spasi untuk contoh yang ditunjukkan di bawah):Outputnya adalah "Hei, ada amigo!".
sumber
Jika Anda menggunakan Java 1.4, Anda bisa melakukan:
(Ini bekerja di 1,5+ juga, tentu saja.)
sumber
Arrays.toString
Sebagai jawaban langsung, solusi yang disediakan oleh beberapa, termasuk @Esko , menggunakan
Arrays.toString
danArrays.deepToString
metode, adalah yang terbaik.Java 8 - Stream.collect (bergabung ()), Stream.forEach
Di bawah ini saya mencoba untuk membuat daftar beberapa metode lain yang disarankan, berusaha sedikit meningkatkan, dengan tambahan yang paling terkenal adalah penggunaan
Stream.collect
operator, menggunakan a , untuk meniru apa yang sedang dilakukan.joining
Collector
String.join
sumber
Sebelum ke Jawa 8
Kita bisa digunakan
Arrays.toString(array)
untuk mencetak array satu dimensi danArrays.deepToString(array)
untuk array multi dimensi.Java 8
Sekarang kita sudah mendapat opsi
Stream
danlambda
untuk mencetak array.Pencetakan satu dimensi array:
Outputnya adalah:
Mencetak Array Multi-Dimensi Jika kita ingin mencetak array multi-dimensi dapat kita gunakan
Arrays.deepToString(array)
sebagai:Sekarang yang perlu diperhatikan adalah metode tersebut
Arrays.stream(T[])
, yang dalam kasusint[]
mengembalikan kitaStream<int[]>
dan kemudian metodeflatMapToInt()
memetakan setiap elemen aliran dengan isi aliran yang dipetakan yang dihasilkan dengan menerapkan fungsi pemetaan yang disediakan untuk setiap elemen.Outputnya adalah:
sumber
String[] array = {"John", "Mahta", "Sara"}
, dan kami ingin output ini tanpa braket dan koma:John Mahta Sara
?Arrays.deepToString(arr)
hanya mencetak pada satu baris.Untuk benar-benar mendapatkan tabel untuk dicetak sebagai tabel dua dimensi, saya harus melakukan ini:
Sepertinya
Arrays.deepToString(arr)
metode ini harus mengambil string pemisah, tetapi sayangnya tidak.sumber
sumber
n
adalah nilai aktual dari array, bukan indeks. Untuk loop reguler, itu juga akan(someArray.length - 1) == i
, karena itu istirahat ketikai
sama dengan panjang array.Berbagai Cara untuk Mencetak Array di Jawa:
Cara Sederhana
Menggunakan
toString()
Mencetak Array of Arrays
Sumber: Mengakses Array
sumber
Menggunakan regular for loop adalah cara paling sederhana untuk mencetak array menurut saya. Di sini Anda memiliki kode sampel berdasarkan intArray Anda
Ini memberikan output sebagai milik Anda 1, 2, 3, 4, 5
sumber
System.out.print(intArray[i]); if(i != intArray.length - 1) System.out.print(", ");
System.out.print(i + (i < intArray.length - 1 ? ", " : ""));
untuk menggabungkan dua garis itu.Saya menemukan posting ini di Vanilla #Java baru-baru ini. Menulisnya tidak nyaman
Arrays.toString(arr);
, lalu mengimporjava.util.Arrays;
sepanjang waktu.Harap dicatat, ini bukan perbaikan permanen dengan cara apa pun. Hanya sebuah retasan yang dapat membuat proses debug menjadi lebih sederhana.
Mencetak array secara langsung memberikan representasi internal dan kode hash. Sekarang, semua kelas memiliki
Object
tipe induk. Jadi, mengapa tidak meretasnyaObject.toString()
? Tanpa modifikasi, kelas Object terlihat seperti ini:Bagaimana jika ini diubah menjadi:
Kelas modded ini mungkin hanya ditambahkan ke jalur kelas dengan menambahkan berikut ke baris perintah:
-Xbootclasspath/p:target/classes
.Sekarang, dengan ketersediaan
deepToString(..)
sejak Java 5,toString(..)
dapat dengan mudah diubahdeepToString(..)
untuk menambahkan dukungan untuk array yang berisi array lain.Saya menemukan ini sebagai hack yang cukup berguna dan akan lebih bagus jika Java bisa menambahkan ini. Saya mengerti masalah potensial dengan memiliki array yang sangat besar karena representasi string bisa bermasalah. Mungkin melewati sesuatu seperti a
System.out
atau aPrintWriter
untuk kemungkinan seperti itu.sumber
if
kondisi ini pada setiap objek?Object
tua biasa? Bisakah kita mengerjakan ide itu lebih jauh? Bukannya saya berpikir bahwa memodifikasi perilaku default objek java.lang. * Adalah sesuatu yang saya dorong ...Itu harus selalu berfungsi versi JDK mana pun yang Anda gunakan:
Ini akan berfungsi jika
Array
mengandung Objects. JikaArray
berisi tipe primitif, Anda bisa menggunakan kelas wrapper alih-alih menyimpan primitif secara langsung sebagai ..Contoh:
Ganti dengan:
Perbarui:
Iya ! ini harus disebutkan bahwa mengubah array ke array objek ATAU menggunakan array Obyek mahal dan dapat memperlambat eksekusi. itu terjadi oleh sifat java yang disebut autoboxing.
Jadi hanya untuk tujuan pencetakan, itu tidak boleh digunakan. kita dapat membuat fungsi yang mengambil array sebagai parameter dan mencetak format yang diinginkan sebagai
sumber
toString(..)
, itu mengalahkan saya mengapa seseorang akan melakukan ini.Di java 8 itu mudah. ada dua kata kunci
Arrays.stream(intArray).forEach
referensi metode:
::println
Jika Anda ingin mencetak semua elemen dalam array dalam baris yang sama, maka cukup gunakan
print
bukanprintln
yaituCara lain tanpa referensi metode cukup gunakan:
sumber
Ada satu cara tambahan jika array Anda bertipe char []:
cetakan
sumber
Untuk menambahkan semua jawaban, mencetak objek sebagai string JSON juga merupakan opsi.
Menggunakan Jackson:
Menggunakan Gson:
sumber
Anda dapat mengulang melalui array, mencetak setiap item, saat Anda mengulang. Sebagai contoh:
Keluaran:
sumber
Ada Cara Mengikuti untuk mencetak Array
sumber
Pintasan sederhana yang saya coba adalah ini:
Itu akan mencetak
Tidak diperlukan loop dalam pendekatan ini dan yang terbaik untuk array kecil saja
sumber
Untuk-setiap loop juga dapat digunakan untuk mencetak elemen array:
sumber
sumber
Menggunakan metode org.apache.commons.lang3.StringUtils.join (*) dapat menjadi pilihan
Misalnya:
Saya menggunakan dependensi berikut
sumber
Ini ditandai sebagai duplikat untuk mencetak byte [] . Catatan: untuk array byte ada metode tambahan yang mungkin sesuai.
Anda dapat mencetaknya sebagai String jika berisi karakter ISO-8859-1.
atau jika mengandung string UTF-8
atau jika Anda ingin mencetaknya sebagai heksadesimal.
atau jika Anda ingin mencetaknya sebagai base64.
atau jika Anda ingin mencetak array nilai byte yang ditandatangani
atau jika Anda ingin mencetak array nilai byte yang tidak ditandatangani
sumber
sumber
jika Anda menjalankan jdk 8.
keluaran:
sumber
toString()
di finalSystem.out.println()
dan menggunakannya sebagaijoiner.add(element.toString())
ganti menambahkan string kosong. Solusi ini berfungsi untuk array tipe non-primitif juga, seragam.element.toString()
di dalamjoiner.add()
hanya untuk tipe non-primitif. Anda masih perlu menggunakanInteger.toString(element)
konstruksi seperti untuk tipe primitif. Secara pribadi, saya menggunakan foreach loopfor (int element : array) joiner.add(Integer.toString(element));
bukan stream, tapi itu masalah selera.Di java 8:
sumber
Jika menggunakan perpustakaan Commons.Lang , kita bisa melakukan:
ArrayUtils.toString(array)
Keluaran:
sumber
// Jika Anda mencetak alamat elemen array pada konsol di java.
sumber
Ada beberapa cara untuk mencetak elemen array. Pertama-tama, saya akan menjelaskan bahwa, apa itu array? .. Array adalah struktur data sederhana untuk menyimpan data .. Ketika Anda mendefinisikan sebuah array, alokasikan set blok memori tambahan dalam RAM. Blok memori tersebut diambil satu unit ..
Ok, saya akan membuat array seperti ini,
Sekarang lihat outputnya,
Anda dapat melihat string yang tidak dikenal dicetak .. Seperti yang saya sebutkan sebelumnya, alamat memori yang array (jumlah array) dinyatakan dicetak. Jika Anda ingin menampilkan elemen dalam array, Anda dapat menggunakan "untuk loop", seperti ini ..
Sekarang lihat outputnya,
Ok, elemen-elemen array satu dimensi yang berhasil dicetak .. Sekarang saya akan mempertimbangkan array dua dimensi .. Saya akan mendeklarasikan array dua dimensi sebagai "number2" dan mencetak elemen menggunakan kata kunci "Arrays.deepToString ()" .Sebelum menggunakan itu Anda harus mengimpor perpustakaan 'java.util.Arrays'.
pertimbangkan output,
Pada saat yang sama, Menggunakan dua untuk loop, elemen 2D dapat dicetak .. Terima kasih!
sumber