Kas yra paprasčiausias būdas spausdinti java masyvą?

„Java“ matricos nepaiso „ toString() , todėl, jei bandysite jas spausdinti tiesiogiai, jūs gausite masyvo klasės pavadinimą + @ + hex Object.toString() , kaip apibrėžta Object.toString() :

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

Tačiau paprastai mums reikia daugiau panašių dalykų [1, 2, 3, 4, 5] . Kas yra paprasčiausias būdas tai padaryti? Štai keletas įvesties ir išvesties pavyzdžių:

 // 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] 
1640 m
03 янв. Alex Spurling rinkosi sausio 03 d 2009-01-03 23:39 '09 at 11:39 2009-01-03 23:39
ответ 31 atsakymų
  • 1
  • 2

Pradedant „Java 5“, galite naudoti Arrays.toString(arr) arba Arrays.deepToString(arr) matricų viduje matricose. Atkreipkite dėmesį, kad Object[] versija skambina .toString() kiekvienam objektui masyve. Išvada netgi papuošta tiksliai taip, kaip prašote.

Pavyzdžiai:

Paprasta masyvas:

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

Išeiti:

2175
03 янв. atsakymas, kurį pateikė Esko 03 Jan 2009-01-03 23:43 '09, 23:43, 2009-01-03 23:43

Visada patikrinkite standartines bibliotekas. Pabandykite:

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

arba jei jūsų masyvas kaip elementus turi kitų masyvų:

 System.out.println(Arrays.deepToString(array)); 
322
03 янв. Atsakymą pateikė Limbic sistema sausio 03 d 2009-01-03 23:48 '09, 23:48 PM 2009-01-03 23:48

Vis dėlto malonu žinoti, kad „visada patikrinkite standartines bibliotekas pirmiausia“ niekada Arrays.toString( myarray )

- kadangi aš sutelkiau dėmesį į myarray tipą, kad pamatytumėte, kaip tai padaryti. Aš nenorėjau, kad tai pakartotumėte: man reikia paprasto skambučio, kad jis atrodytų toks pat kaip ir „Eclipse“ atkūrimo įrenginyje, o myarray.toString () tiesiog to nepadarė.

 import java.util.Arrays; . . . System.out.println( Arrays.toString( myarray ) ); 
89
13 мая '10 в 0:01 2010-05-13 00:01 atsakymas yra Dan Russ Bateman gegužės 13 d., 10 val. 0:01 2010-05-13 00:01

JDK1.8 galite naudoti apibendrintas operacijas ir lambda išraišką:

 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);  
73
07 февр. Atsakymą pateikė Eric Baker 07 Feb. 2014-02-07 02:35 '14 at 2:35 am 2014-02-07 02:35

Jei naudojate „Java 1.4“, galite:

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

(Žinoma, tai veikia ir 1.5+.)

38
04 янв. atsakymas pateikiamas Ross 04 jan. 2009-01-04 00:44 '09 ne 0:44 2009-01-04 00:44

Pradedant „Java 8“, taip pat galite naudoti styginių klasės pateiktą join() metodą, kad spausdintumėte masyvo elementus be skliaustelių ir atskirkite juos naudodami selektorių (kuris yra erdvės simbolis toliau pateiktam pavyzdžiui):

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

Išvestis bus „Sveiki, Amigo!“.

36
23 дек. atsakymas pateikiamas 23 d. 2015-12-23 21:51 '15 - 21:51 2015-12-23 21:51

Arrays.toString

Kaip tiesioginis atsakymas, kelių sprendimų, įskaitant „@Esko“ , naudojant „ Arrays.toString ir „ Arrays.deepToString , sprendimas yra tiesiog geriausias.

„Java 8“ - „Stream.collect“ (prisijungimas ()), „Stream.forEach“

Toliau bandysiu išvardyti kai kuriuos kitus siūlomus metodus, bandant šiek tiek patobulinti, o žymiausias papildymas yra „ Stream.collect operatoriaus naudojimas, naudodamasis joining Collector kad būtų galima String.joinString.join “.

 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); 
30
11 марта '16 в 8:36 2016-03-11 08:36 atsakymą pateikė „ YoYo “ kovo 16 d. 16 val. 8:36 2016-03-11 08:36

Arrays.deepToString(arr) spausdina tik vieną eilutę.

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

Jei norite, kad lentelė būtų spausdinama kaip dvimatė lentelė, turėjau tai padaryti:

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

Atrodo, kad Arrays.deepToString(arr) metodas turėtų būti skiriamas Arrays.deepToString(arr) , bet, deja, tai nėra.

28
05 окт. atsakymas pateikiamas Rhyous 05 okt. 2013-10-05 22:13 '13, 22:13 pm 2013-10-05 22:13

Prieš „Java“ 8

Mes galime naudoti „ Arrays.toString(array) kad galėtume spausdinti vieną matricą ir „ Arrays.deepToString(array) daugiamatėms matricoms.

Java 8

Dabar mes turime parinktį „ Stream ir „ lambda spausdinti masyvą.

Spausdinti vieno matmens masyvą:

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

Išeiti:

[1, 2, 3, 4, 5]
[John, Mary, Bob]
1
2
3
4
5
Jonas
Marija
bob

Daugialypės matricos spausdinimas Tik tuo atveju, jei norime išspausdinti daugialypį masyvą, galime naudoti Arrays.deepToString(array) kaip:

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

Dabar reikia pažymėti, kad Arrays.stream(T[]) metodas, kuris int[] grąžinamas į Stream<int[]> ir tada flatMapToInt() metodas, atitinka kiekvieną srauto elementą su rodomo srauto turiniu, sukurtu taikant pateiktą rodymo funkciją kiekvienam elementui.

Išeiti:

[[11, 12], [21, 22], [31, 32, 33]]
[[John, Bravo], [Mary, Lee], [Bob, Johnson]]
11
12
21
22
31
32
33
Jonas
Bravo
Marija
lee
bob
Johnson

25
19 июня '15 в 9:10 2015-06-19 09:10 atsakymas pateikiamas i_am_zero birželio 19 d., 15 val. 9:10 2015-06-19 09:10
 for(int n: someArray) { System.out.println(n+" "); } 
18
24 янв. atsakymas pateikiamas kažkada sausio 24 d 2011-01-24 07:25 '11, 7:25, 2011-01-24 07:25

Įvairūs masyvų spausdinimo būdai Java:

  • Lengvas būdas

     List<String> list = new ArrayList<String>(); list.add("One"); list.add("Two"); list.add("Three"); list.add("Four"); // Print the list in console System.out.println(list); 

Išvada: [Vienas, du, trys, keturi]

  1. toString()

     String[] array = new String[] { "One", "Two", "Three", "Four" }; System.out.println(Arrays.toString(array)); 

Rezultatai: [vienas, du, trys, keturi]

  1. Masyvų masyvų rinkinys

     String[] arr1 = new String[] { "Fifth", "Sixth" }; String[] arr2 = new String[] { "Seventh", "Eight" }; String[][] arrayOfArray = new String[][] { arr1, arr2 }; System.out.println(arrayOfArray); System.out.println(Arrays.toString(arrayOfArray)); System.out.println(Arrays.deepToString(arrayOfArray)); 

Išvada: [[Ljava.>

Išteklius: prieiga prie „Array“

16
07 авг. Atsakymas yra „ Virtual 7 August“. 2016-08-07 17:05 '16 at 17:05 pm 2016-08-07 17:05

Naudojant įprastą kilpą, mano nuomone , tai yra paprasčiausias būdas spausdinti masyvą. Čia turite pavyzdinį kodą, pagrįstą jūsų intArray

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

Jis pateikia rezultatą kaip 1, 2, 3, 4, 5

12
28 дек. Atsakymas duotas Andrew_Dublin 28 d. 2013-12-28 02:31 '13, 02:31 am 2013-12-28 02:31

Aš neseniai susitikau su šiuo paštu Vaniloje #Java . Arrays.toString(arr); rašyti nėra labai patogu Arrays.toString(arr); tada importuokite java.util.Arrays; visą laiką.

Atkreipkite dėmesį, kad tai jokiu būdu nėra nuolatinis nustatymas. Tiesiog nulaužkite, kad būtų lengviau derinti.

Masyvo spausdinimas tiesiogiai suteikia vidinį vaizdą ir maišos kodą. Dabar visos klasės turi pirminį tipą Object . Tad kodėl gi ne įsilaužti Object.toString() ? Be pakeitimų Objekto klasė atrodo taip:

 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 

Ką daryti, jei tai pakeista į:

 public String toString() { if (this instanceof boolean[]) return Arrays.toString((boolean[]) this); if (this instanceof byte[]) return Arrays.toString((byte[]) this); if (this instanceof short[]) return Arrays.toString((short[]) this); if (this instanceof char[]) return Arrays.toString((char[]) this); if (this instanceof int[]) return Arrays.toString((int[]) this); if (this instanceof long[]) return Arrays.toString((long[]) this); if (this instanceof float[]) return Arrays.toString((float[]) this); if (this instanceof double[]) return Arrays.toString((double[]) this); if (this instanceof Object[]) return Arrays.deepToString((Object[]) this); return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 

Ši modifikuota klasė gali būti paprasčiausiai pridedama prie klasės kelio į komandų eilutę: -Xbootclasspath/p:target/classes .

Dabar, kai prieigos prie „Java 5“ prieigos prie „ deepToString(..) , „ toString(..) galima lengvai pakeisti į „ deepToString(..) kad būtų pridėta parama deepToString(..) kuriuose yra kitų masyvų.

Manau, kad tai yra gana naudingas įsilaužimas, ir būtų puiku, jei „Java“ ką tik pridėtų. Suprantu galimas problemas, susijusias su labai didelėmis matricomis, nes styginių vaizdavimas gali būti problemiškas. Galbūt tokiems įvykiams atsiųskite kažką panašaus į „ System.out arba „ PrintWriter “.

8
11 марта '16 в 14:50 2016-03-11 14:50 atsakymas pateikiamas „ Debosmit Ray“ kovo 11 d., 16 val. 14:50 2016-03-11 14:50

Jis visada turėtų veikti priklausomai nuo JDK versijos, kurią naudojate:

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

Jis veiks, jei „ Array yra objektų. Jei „ Array yra primityvūs tipai, galite naudoti „wrapper“ klases, o ne primityvų duomenų saugojimą.

Pavyzdys:

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

Pakeiskite jį:

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

Atnaujinti:

Taip tai reiškia, kad masyvo konvertavimas į objektų masyvą ARBA naudoti Objekto masyvą yra brangus ir gali sulėtinti vykdymą. tai vyksta „Java“ simboliu, vadinamu autoboxing.

Taigi, tik spausdinimui, jis neturėtų būti naudojamas. galime sukurti funkciją, kuri matuoja masyvą kaip parametrą ir išspausdintų norimą formatą kaip

 public void printArray(int [] a){ //write printing code } 
7
13 мая '16 в 14:01 2016-05-13 14:01 atsakymą pateikė Girish Kumar gegužės 13 d. 16:01 2016-05-13 14:01

„Java 8“ yra lengva. yra du raktiniai žodžiai

  • srautas: Arrays.stream(intArray).forEach
  • metodo nuoroda: ::println

     int[] intArray = new int[] {1, 2, 3, 4, 5}; Arrays.stream(intArray).forEach(System.out::println); 

Jei norite spausdinti visus masyvo elementus vienoje eilutėje, tiesiog naudokite print vietoj println ie

 int[] intArray = new int[] {1, 2, 3, 4, 5}; Arrays.stream(intArray).forEach(System.out::print); 

Kitaip, nenurodydami metodo, naudokite:

 int[] intArray = new int[] {1, 2, 3, 4, 5}; System.out.println(Arrays.toString(intArray)); 
7
26 июня '16 в 18:30 2016-06-26 18:30 atsakymas duodamas suatCoskun birželio 26 d. 16 val. 2016-06-26 18:30

Yra ir kitas būdas, jei jūsų masyvas turi tipo char []:

 char A[] = {'a', 'b', 'c'}; System.out.println(A); // no other arguments 

spausdina

 abc 
5
29 апр. Atsakymą pateikė Roam balandžio 29 d. 2014-04-29 10:34 '14 ne 10:34 2014-04-29 10:34

Jei norite pridėti visus atsakymus, galima spausdinti objektą kaip JSON eilutę.

„Jackson“ naudojimas:

 ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); System.out.println(ow.writeValueAsString(anyArray)); 

Naudojant „Gson“:

 Gson gson = new Gson(); System.out.println(gson.toJson(anyArray)); 
4
18 февр. Jean Logeart atsakymas vasario 18 d 2014-02-18 23:21 '14, 11:21 pm 2014-02-18 23:21

Galite slinkti per masyvą, spausdindami kiekvieną elementą, kai kilp. Pavyzdžiui:

 String[] items = {"item 1", "item 2", "item 3"}; for(int i = 0; i < items.length; i++) { System.out.println(items[i]); } 

Išvada:

 item 1 item 2 item 3 
4
21 июля '16 в 2:55 2016-07-21 02:55 atsakymą pateikė Dylan Black liepos 21 d., 16 d., 2:55 2016-07-21 02:55

Yra toks masyvo spausdinimo metodas

  // 1) toString() int[] arrayInt = new int[] {10, 20, 30, 40, 50}; System.out.println(Arrays.toString(arrayInt)); // 2 for loop() for (int number : arrayInt) { System.out.println(number); } // 3 for each() for(int x: arrayInt){ System.out.println(x); } 
4
25 сент. atsakymą pateikė Ravi Patel 25 sep. 2017-09-25 16:29 '17 16:29 pm 2017-09-25 16:29

Supaprastinta etiketė, kurią bandžiau, yra:

  int x[] = {1,2,3}; String printableText = Arrays.toString(x).replaceAll("[\\[\\]]", "").replaceAll(", ", "\n"); System.out.println(printableText); 

Jis atspausdins

 1 2 3 

Šiame metode nėra jokių kilpų, o tai yra geriausia mažoms matricoms.

4
17 февр. Mohamed Idris atsakymas, pateiktas vasario 17 d. 2015-02-17 11:02 '15 at 11:02 2015-02-17 11:02

Naudojant org.apache.commons.>

 String[] strArray = new String[] { "John", "Mary", "Bob" }; String arrayAsCSV = StringUtils.join(strArray, " , "); System.out.printf("[%s]", arrayAsCSV); //output: [John , Mary , Bob] 

Aš naudoju šią priklausomybę

 <groupId>org.apache.commons</groupId> <artifactId>commons-> 
3
06 авг. atsakymą pateikė Haim Raman rugpjūčio 06 d 2015-08-06 14:24 '15 - 14:24 2015-08-06 14:24
 public class printer { public static void main(String[] args) { String a[] = new String[4]; Scanner sc = new Scanner(System.in); System.out.println("enter the data"); for (int i = 0; i < 4; i++) { a[i] = sc.nextLine(); } System.out.println("the entered data is"); for (String i : a) { System.out.println(i); } } } 
3
21 сент. atsakymas, kurį pateikė user3369011 Sep 21 2014-09-21 12:11 '14, 12:11 2014-09-21 12:11

Kiekvienam ciklui taip pat gali būti naudojamas masyvo elementų spausdinimas:

 int array[] = {1, 2, 3, 4, 5}; for (int i:array) System.out.println(i); 
3
05 дек. atsakymą pateikė hasham.98 05 dec. 2016-12-05 23:10 '16 at 11:10 pm 2016-12-05 23:10

Jis yra pažymėtas kaip dublikatas, skirtas spausdinti baitą [] . Pastaba: baitų masyvui yra papildomų metodų, kurie gali būti tinkami.

Galite spausdinti kaip eilutę, jei jame yra ISO-8859-1 simbolių.

 String s = new String(bytes, StandardChars.ISO_8559); System.out.println(s); // to reverse byte[] bytes2 = s.getBytes(StandardChars.ISO_8559); 

arba jei jame yra eilutė UTF-8

 String s = new String(bytes, StandardChars.UTF_8); System.out.println(s); // to reverse byte[] bytes2 = s.getBytes(StandardChars.UTF_8); 

arba jei norite ją spausdinti kaip hex.

 String s = DatatypeConverter.printHexBinary(bytes); System.out.println(s); // to reverse byte[] bytes2 = DatatypeConverter.parseHexBinary(s); 

arba jei norite spausdinti kaip base64.

 String s = DatatypeConverter.printBase64Binary(bytes); System.out.println(s); // to reverse byte[] bytes2 = DatatypeConverter.parseBase64Binary(s); 

arba jei norite spausdinti pasirašytų baitų reikšmių masyvą

 String s = Arrays.toString(bytes); System.out.println(s); // to reverse String[] split = s.substring(1, s.length() - 1).split(", "); byte[] bytes2 = new byte[split.length]; for (int i = 0; i < bytes2.length; i++) bytes2[i] = Byte.parseByte(split[i]); 

arba jei norite spausdinti nepasirašytų reikšmių masyvą

 String s = Arrays.toString( IntStream.range(0, bytes.length).map(i -> bytes[i]  0xFF).toArray()); System.out.println(s); // to reverse String[] split = s.substring(1, s.length() - 1).split(", "); byte[] bytes2 = new byte[split.length]; for (int i = 0; i < bytes2.length; i++) bytes2[i] = (byte) Integer.parseInt(split[i]); // might need a range check. 
2
22 июня '18 в 22:17 2018-06-22 22:17 atsakymą pateikė Peter Lawrey birželio 22 d. 18 val. 10:17 val. 2018-06-22 22:17
 // array of primitives: int[] intArray = new int[] {1, 2, 3, 4, 5}; System.out.println(Arrays.toString(intArray)); output: [1, 2, 3, 4, 5] 

 // array of object references: String[] strArray = new String[] {"John", "Mary", "Bob"}; System.out.println(Arrays.toString(strArray)); output: [John, Mary, Bob] 
1
16 марта '18 в 4:17 2018-03-16 04:17 atsakymas pateikiamas fjnk kovo 16-18 d. 4:17 2018-03-16 04:17

Yra keli būdai spausdinti masyvo elementus. Visų pirma, aš paaiškinsiu, kas yra masyvas? .. Masyvas yra paprasta duomenų saugojimo duomenų struktūra. Apibrėždami masyvą, pasirinkite atminties blokų rinkinį. Šiuos atminties blokus priima vienas.

Na, sukursiu tokią masyvą,

 class demo{ public static void main(String a[]){ int[] number={1,2,3,4,5}; System.out.print(number); } } 

Dabar pažvelkite į rezultatą

2019

Java 8:

 Arrays.stream(myArray).forEach(System.out::println); 
0
20 апр. Mehdi atsakymas, pateiktas balandžio 20 d 2018-04-20 21:25 '18, 9:25 val. 2018-04-20 21:25

jei naudojate JDK 8.

 public static void print(int[] array) { StringJoiner joiner = new StringJoiner(",", "[", "]"); Arrays.stream(array).forEach(element -> joiner.add(element + "")); System.out.println(joiner.toString()); } int[] array = new int[]{7, 3, 5, 1, 3}; print(array); 

išeiti:

 [7,3,5,1,3] 
0
10 дек. Atsakymas suteiktas 10 d. 2018-12-10 10:57 '18, 10:57 2018-12-10 10:57

Jei norite spausdinti, įvertinkite „Array“ turinį, kaip galite naudoti „ Arrays.toString

 jshell> String[] names = {"ram","shyam"}; names ==> String[2] { "ram", "shyam" } jshell> Arrays.toString(names); $2 ==> "[ram, shyam]" jshell> 
-1
06 июля '18 в 15:29 2018-07-06 15:29 atsakymą pateikė Sudip Bhandari liepos 18 d. 18 val. 15:29 2018-07-06 15:29

Galite naudoti „ Arrays.toString()

 String[] array = { "a", "b", "c" }; System.out.println(Arrays.toString(array)); 
-3
20 дек. Atsakymas pateikiamas Atuljssaten 20 d. 2017-12-20 11:52 '17 at 11:52 am 2017-12-20 11:52
  • 1
  • 2

Kiti klausimai apie žymes arba Užduoti klausimą