Soru Java dizisini yazdırmanın en kolay yolu nedir?


Java'da diziler geçersiz kılmıyor toString()Bu nedenle, doğrudan birini yazdırmaya çalışırsanız, className + @ + 'nın hashCode tarafından tanımlanan dizinin Object.toString():

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

Ama genellikle aslında daha çok bir şey isterdik [1, 2, 3, 4, 5]. Bunu yapmanın en basit yolu nedir? İşte bazı örnek girişler ve çıkışlar:

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

1531
2018-01-03 20:39


Menşei


Temsilin dizelerden başka nesneler için ne olmasını istersiniz? ToString çağrısı sonucu? Tırnak içinde veya değil mi? - Jon Skeet
Evet nesneler, toString () yöntemiyle ve tırnak işareti olmadan gösterilir (yalnızca örnek çıktıyı düzenler). - Alex Spurling
Pratikte, yakından ilişkili stackoverflow.com/questions/29140402/... - Raedwald
Bu garip çıktı, mutlaka hafıza konumu değil. Bu hashCode() onaltılık olarak. Görmek Object#toString(). - 4castle
Java8 onayında tek boyutlu veya çok boyutlu dizi yazdırmak için stackoverflow.com/questions/409784/... - i_am_zero


Cevaplar:


Java 5'ten beri kullanabilirsiniz Arrays.toString(arr) veya Arrays.deepToString(arr) dizilerdeki diziler için. Unutmayın ki Object[] sürüm çağrıları .toString() dizideki her nesnede. Çıkış, tam olarak istediğin şekilde dekore edilmiş.

Örnekler:

Basit dizi:

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

Çıktı:

[John, Mary, Bob]

İç içe dizi:

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

Çıktı:

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

double Dizi:

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

Çıktı:

[7.0, 9.0, 5.0, 1.0, 3.0 ]

int Dizi:

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

Çıktı:

[7, 9, 5, 1, 3 ]

2042
2018-01-03 20:48



Bu çok boyutlu diziler için de çalışır. - Alok Mishra
Ya bir dizi dizimiz varsa ve basit bir çıktı istersek; sevmek: String[] array = {"John", "Mahta", "Sara"}ve bu çıktısı parantez ve virgül olmadan istiyoruz: John Mahta Sara? - Hengameh
@Hengameh: Bunu yapmanın birkaç yolu var ama benim favorim bu: javahotchocolate.com/notes/java.html#arrays-tostring . - Russ Bateman
Bilginize, Arrays.deepToString() sadece bir kabul eder Object [] (ya da genişleyen bir dizi ders Object, gibi Integerbu yüzden ilkel bir dizi üzerinde çalışmayacak int []. Fakat Arrays.toString(<int array>) ilkel diziler için iyi çalışıyor. - Marcus
@Hengameh Buna adanmış bir yöntem var. System.out.println(String.join(" ", new String[]{"John", "Mahta", "Sara"})) basacak John Mahta Sara. - dorukayhan


Her zaman ilk önce standart kütüphaneleri kontrol edin. Deneyin:

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

veya diziniz öğeler olarak başka diziler içeriyorsa:

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

305
2018-05-12 21:01



Ya bir dizi dizimiz varsa ve basit bir çıktı istersek; sevmek: String[] array = {"John", "Mahta", "Sara"}ve bu çıktısı parantez ve virgül olmadan istiyoruz: John Mahta Sara? - Hengameh
@Hengameh Arrays.toString (array) 'i bir string değişkenine depolayın ve sonra Java'nın yerini alarak parantezleri kaldırın. - Naveed Ahmad
@Hengameh Günümüzde Java 8 ile: String.join(" ", Arrays.asList(array)). doktor - Justin


Bununla birlikte, "her zaman ilk önce standart kütüphaneleri kontrol edin" diye bir şey bilmek güzel. Arrays.toString( myarray )

- Bunu nasıl yapacağımı görmek için myarrayın türüne konsantre oldum. Bu şeyden kaçınmak istemedim: Eclipse hata ayıklayıcıda gördüğümle benzer bir arama yapmak istedim ve myarray.toString () sadece bunu yapmıyordu.

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

85
2018-02-06 23:35



Ya bir dizi dizimiz varsa ve basit bir çıktı istersek; sevmek: String[] array = {"John", "Mahta", "Sara"}ve bu çıktısı parantez ve virgül olmadan istiyoruz: John Mahta Sara? - Hengameh
@Hengameh Bence bu başka bir konu. Bu dizeyi daha sonra ortak dizge işlemleriyle değiştirebilirsiniz ... Arrays.toString (myarray) .replace ("[", "("); vb. Gibi). - OddDev


JDK1.8'de toplu işlemleri ve bir lambda ifadesini kullanabilirsiniz:

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



Ya da daha az hantal, Arrays.stream(strArray).forEach(System.out::println); - Alexis C.
Bu beceriksiz. Olmalı System.out::println Bu bir Java 8 yöntem referansıdır. Sen kod gereksiz bir lambda üretir. - Boris the Spider
Sadece atla Arrays.asList ve yap Arrays.stream(strArray).forEach(System.out::println) - Justin
@AlexisC. Çünkü dizilerden başka nesnelerle de kullanılabilir. - Yassin Hajaj
@YassinHajaj İkisi de. Örneğin, dizinin üzerinde bir aralık akışına sahip olmak istiyorsanız, Stream.of yapmak olurdu .skip(n).limit(m). Mevcut uygulama, bir SIZED akışı döndürmezken Arrays.stream(T[], int, int) Paralel olarak işlem yapmak istiyorsanız, daha iyi bölme performanslarına yol açar. Eğer varsa int[], yanlışlıkla kullanabilirsin Stream.of bir geri dönecek Stream<int[]> tek bir elemanla Arrays.stream sana verecek IntStream direkt olarak. - Alexis C.


Java 1.4 kullanıyorsanız, bunun yerine şunları yapabilirsiniz:

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

(Bu elbette 1.5+ de çalışıyor.)


37
2017-12-23 18:51



Ne yazık ki bu sadece ilkellerin dizileri değil, nesnelerin dizileriyle çalışır. - Alex Spurling


Java 8 ile başlayarak, aynı zamanda join() tarafından sağlanan yöntem Dize sınıfı dizi elemanlarını köşeli ayraçlar olmadan yazdırmak ve bir sınırlayıcıyla ayırmak (aşağıda gösterilen örnek için boşluk karakteri):

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

Çıktı "Hey amigo!" Olacak.


35
2017-10-05 19:13





Arrays.deepToString(arr) sadece bir satırda yazdırır.

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

İki boyutlu bir tablo olarak yazdırılacak bir tablo almak için şunu yapmalıydım:

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

Gibi görünüyor Arrays.deepToString(arr) yöntem ayırıcı bir dize almalıdır, ancak ne yazık ki değil.


27
2018-03-11 05:36



Belki de System.getProperty ("line.separator") kullanın; \ r \ n yerine Windows olmayanlar için de doğru. - Scooter
şimdi System.lineSeparator () kullanabilirsiniz - Novaterata


Arrays.toString

Doğrudan bir cevap olarak, @Esko dahil olmak üzere birkaç tarafından sağlanan çözüm, kullanmak Arrays.toString ve Arrays.deepToString yöntemleri, sadece en iyisidir.

Java 8 - Stream.collect (birleştirme ()), Stream.forEach

Aşağıda, önerilen diğer yöntemlerden bazılarını listelemeye çalışıyorum, biraz daha geliştirmeye çalışıyorum; Stream.collect operatör joining  Collectorneyi taklit etmek String.join yapıyor.

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





Java 8'den önce kullanabilirdik Arrays.toString(array) tek boyutlu bir dizi yazdırmak Arrays.deepToString(array) çok boyutlu diziler için. Seçeneğimiz var Stream ve lambda Java 8'de, dizinin baskısı için de kullanılabilir.

Tek Boyutlu Dizinin Yazdırılması:

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

Çıktı:

[1, 2, 3, 4, 5]
  [John, Mary, Bob]
  1
  2
  3
  4
  5
  John
  Mary
  şilin

Çok Boyutlu Dizi Yazdırma Sadece biz kullanabileceğimiz çok boyutlu bir dizi yazdırmak istiyorsak Arrays.deepToString(array) gibi:

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

Şimdi gözlemlemek gereken nokta, yöntemin Arrays.stream(T[]), durumunda int[] bizi döndürür Stream<int[]> ve sonra yöntem flatMapToInt() Her bir öğeye, sağlanan eşleme işlevinin uygulanmasıyla üretilen bir eşlenen akışın içeriğiyle akıştaki her bir elemanı eşler.

Çıktı:

[[11, 12], [21, 22], [31, 32, 33]]
  [[John, Bravo], [Mary, Lee], [Bob, Johnson]]
  11
  12
  21
  22
  31
  32
  33
  John
  Bravo
  Mary
  rüzgâraltı
  şilin
  Johnson


23
2018-01-24 04:25



Ya bir dizi dizimiz varsa ve basit bir çıktı istersek; sevmek: String[] array = {"John", "Mahta", "Sara"}ve bu çıktısı parantez ve virgül olmadan istiyoruz: John Mahta Sara? - Hengameh


for(int n: someArray) {
    System.out.println(n+" ");
}

17
2017-08-07 14:05



Bu şekilde boş bir alana sahip olursunuz;) - Matthias
@ matthiad .. bu satır boş alan ile sona ermekten kaçınacaktır System.out.println (n + (someArray.length == n)? "": "" "); - Muhammad Suleman
Bunu yapmanın en kötü yolu. - NameNotFoundException
Bu çok verimsizdir ama yeni başlayanlar için iyidir. - Raymo111
@MuhammadSuleman Bu işe yaramaz, çünkü bu her bir döngü için. n dizinden gerçek değer, dizin değil. Düzenli bir döngü için, aynı zamanda (someArray.length - 1) == içünkü ne zaman kırılır i dizi uzunluğuna eşittir. - Radiodef