Mai mult
Ce's cel mai simplu mod de a imprima un Java array?
În Java, tablouri don't suprascrie toString()
, așa că, dacă încercați să imprimați direct, ai className
+ '@' + hex a valoare
din matrice, astfel cum sunt definite de Obiect.toString()`:
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // prints something like '[I@3343c8b3'
Dar, de obicei, ne-am'd fapt vreau ceva mai mult[1, 2, 3, 4, 5]
. Ce's cel mai simplu mod de a face asta? Iată câteva exemple de intrări și ieșiri:
// 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
Deoarece Java 5 puteți utiliza
Tablouri.toString(arr)
sauTablouri.deepToString(arr)
pentru tablouri în matrice. Rețineți căObject [] versiunea pentru telefoane
.toString (), pe fiecare obiect în matrice. Ieșirea este decorat în aceeași manieră ai're cer.Exemple:
Simplu Matrice:
String[] tablou = new String[] {"John", "Maria", "Bob"}; Sistem.afară.println(Arrays.toString(array));
Ieșire:
[Ioan, Maria, Bob]
Imbricate Matrice:
String[][] deepArray = new String[][] {{"John", "Maria"}, {"Alice", "Bob"}}; Sistem.afară.println(Arrays.toString(deepArray)); //ieșire: [[Ljava.lang.String;@106d69c, [Ljava.lang.String;@52e922] Sistem.afară.println(Arrays.deepToString(deepArray));
Ieșire:
[[Ioan, Maria], [Alice, Bob]]
"dublu" Matrice:
double[] doubleArray = { 7.0, 9.0, 5.0, 1.0, 3.0 }; Sistem.afară.println(Arrays.toString(doubleArray));
Ieșire:
[7.0, 9.0, 5.0, 1.0, 3.0 ]
int
Matrice:int[] intArray = { 7, 9, 5, 1, 3 }; Sistem.afară.println(Arrays.toString(intArray));
Ieșire:
[7, 9, 5, 1, 3 ]
Verificați întotdeauna standard de biblioteci în primul rând. Încercați:
sau daca array-ul conține și alte rețele și elemente:
Acest lucru este frumos să știu, cu toate acestea, ca și pentru "verificați întotdeauna standard biblioteci primul" I'd nu au dat peste un truc de Tablouri.toString( myarray )`
În JDK1.8 puteți utiliza agregate de operațiuni și o expresie lambda:
Daca're folosind Java 1.4, poți în schimb să faci:
(Aceasta funcționează în 1,5+ prea, desigur.)
Incepand cu Java 8, s-ar putea, de asemenea, profita de join()` metoda furnizate de clasa String pentru a imprima elementele de matrice, fără paranteze și separate printr-un delimitator de alegere (care este caracterul spațiu pentru exemplul prezentat mai jos):
Producția va fi "Hei, prietene!".
Tablouri.toString
Ca un răspuns direct, soluția oferită de mai multe, inclusiv @Esko, folosind
Arrays.toString
șiArrays.deepToString
metode, este pur și simplu cel mai bun.Java 8 - Stream.colecta(aderarea()), Flux.forEach
Mai jos voi încerca să lista unele dintre alte metode sugerate, încercarea de a îmbunătăți un pic, cu cele mai notabile plus fiind utilizarea
Stream.collect
operatorul, folosind unjoining
"Colector", pentru a imita ceea ce `Șir de caractere.alătură-te este de a face.Înainte de Java 8
Ne-ar fi folosit
Tablouri.toString(matrice)
pentru a imprima o matrice dimensionale și Tablouri.deepToString(matrice) pentru matrice multi-dimensionale.Java 8
Acum avem optiunea de "Stream" și "lambda" pentru a imprima matrice.
Imprimarea Unul dimensional Matrice:
De ieșire este:
Imprimarea Multi-dimensional Matrice În caz că doriți să imprimați multi-dimensional matrice putem folosi Tablouri.deepToString(matrice)` ca:
Acum pe punctul de a observa este că metoda
Tablouri.stream(T[])
, care, în caz deint[]
ne întoarceFlux<int[]> și apoi metoda
flatMapToInt()` maps fiecare element de flux cu conținutul unui mapate fluxul produs prin aplicarea prevăzută funcția de cartografiere pentru fiecare element.De ieșire este:
Tablouri.deepToString(arr)
tipărește numai pe o singură linie.Pentru a obține de fapt, un tabel pentru a imprima ca un bidimensională masă, am avut de a face acest lucru:
Se pare ca
Tablouri.deepToString(arr)
metoda ar trebui să ia un separator șir, dar, din păcate, nu't.Diferite Moduri de a Imprima Tablouri în Java:
Listă list = new ArrayList(); lista.adauga("O"); lista.adauga("Doi"); lista.adauga("de Trei"); lista.adauga("Patru"); // Imprima lista in consola Sistem.afară.println(lista);
toString()
String[] tablou = new String[] { "O", "Doi", "Trei", "Patru" }; Sistem.afară.println(Arrays.toString(array));
String[] arr1 = new String[] { "al Cincilea", "al Șaselea" }; String[] arr2 = new String[] { "al Șaptelea", "Opt" }; String[][] arrayOfArray = new String[][] { arr1, arr2 }; Sistem.afară.println(arrayOfArray); Sistem.afară.println(Arrays.toString(arrayOfArray)); Sistem.afară.println(Arrays.deepToString(arrayOfArray));
Resurse: Accesa O Serie
Folosind regulat pentru bucla este cel mai simplu mod de imprimare matrice în opinia mea. Aici ai un exemplu de cod bazat pe intArray
Acesta oferă ieșire ca a ta 1, 2, 3, 4, 5
În java 8 este ușor. există două cuvinte cheie
Tablouri.stream(intArray).forEach
::println
int[] intArray = new int[] {1, 2, 3, 4, 5}; Tablouri.stream(intArray).forEach(System.out::println);
Dacă doriți să imprimați toate elementele din matrice în aceeași linie, apoi utilizați doar
print "în loc de" println
adicăUn alt mod fără metodă de referință folosi doar:
Acesta ar trebui să lucreze întotdeauna indiferent de versiunea JDK utilizați:
Acesta va funcționa dacă "Matrice" conține Obiecte. Dacă "Matrice" conține tipuri primitive, puteți utiliza clase wrapper în loc stocarea primitive direct ca..
Exemplu:
Înlocuiți-l cu:
Actualizare :
Da ! acest lucru este de a fi menționat că transformarea unei matrice la un obiect array SAU de a folosi Obiectul's matrice este costisitoare și mai lent de execuție. se întâmplă de natura java numit autoboxing.
Deci numai pentru imprimare scop, Aceasta nu ar trebui să fie utilizate. putem face o funcție care ia ca parametru o matrice și printuri de format dorit ca
Am dat peste acest post în Vanilie #Java recent. L's nu foarte convenabil scris
Tablouri.toString(arr);
, apoi importând `java.util.Tablouri; tot timpul.Vă rugăm să rețineți, acest lucru nu este o soluție permanentă, prin orice mijloace. Doar un hack care poate face debugging mai simplu.
Imprimarea unei matrice direct oferă reprezentare internă și hashCode. Acum, toate clasele au "Obiect" ca părinte-tip. Deci, de ce nu hack
Obiect.toString()
? Fără modificări, la clasa Object arată astfel:Ce se întâmplă dacă acest lucru este schimbat la:
Acest modded clasa poate fi pur și simplu adăugate la clasa calea prin adăugarea următoarelor pentru a linia de comandă:
-Xbootclasspath/p:țintă/clase
.Acum, cu disponibilitatea de
deepToString(..)
deoarece Java 5,toString(..)
poate fi ușor schimbat ladeepToString(..)
pentru a adăuga suport pentru matrice care conțin alte tablouri.Am găsit acest lucru să fie o destul de util hack și ar fi minunat dacă Java ar putea pur și simplu adăugați acest lucru. Înțeleg potențialele probleme cu care are foarte mari tablouri din șirul reprezentărilor ar putea fi problematică. Poate trece ceva ca un Sistem.afară ' or a
PrintWriter
pentru o astfel de eventualitate.Nu's o modalitate suplimentară dacă matricea este de tip char[]:
printuri
Ai putea bucla prin matrice, imprimarea fiecare element, ca ai buclă. De exemplu:
Ieșire:
Pentru a adăuga la toate răspunsurile, imprimare obiectul ca un șir JSON este, de asemenea, o opțiune.
Folosind Jackson:
Folosind Gson:
Există Următoarele pentru a imprima Matrice
Pentru fiecare buclă poate fi, de asemenea, folosit pentru a imprima elementele de matrice: