2302 votes

Quelle est la façon la plus simple d'imprimer un tableau Java ?

En Java, les tableaux ne surchargent pas toString() Ainsi, si vous essayez d'en imprimer un directement, vous obtiendrez le message suivant className + '@' + l'hexagone de l'adresse [hashCode](https://en.wikipedia.org/wiki/Java_hashCode()) du tableau, tel que défini par Object.toString() :

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

Mais en général, nous voulons plutôt quelque chose comme [1, 2, 3, 4, 5] . Quel est le moyen le plus simple de le faire ? Voici quelques exemples d'entrées et de sorties :

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

9 votes

Comment voulez-vous que la représentation soit pour les objets autres que les chaînes de caractères ? Le résultat de l'appel à toString ? Entre guillemets ou non ?

3 votes

Oui, les objets seraient représentés par leur méthode toString() et sans guillemets (il suffit de modifier l'exemple de sortie).

2 votes

Dans la pratique, elle est étroitement liée à stackoverflow.com/questions/29140402/

3070voto

Esko Points 15578

Depuis Java 5, vous pouvez utiliser Arrays.toString(arr) o Arrays.deepToString(arr) pour les tableaux dans les tableaux. Notez que le Object[] appels de version .toString() sur chaque objet du tableau. La sortie est même décorée de la manière exacte que vous demandez.

Exemples :

  • Simple Array :

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

    Sortie :

    [John, Mary, Bob]
  • Tableau imbriqué :

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

    Sortie :

    [[John, Mary], [Alice, Bob]]
  • double Array :

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

    Sortie :

    [7.0, 9.0, 5.0, 1.0, 3.0 ]
  • int Array :

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

    Sortie :

    [7, 9, 5, 1, 3 ]

4 votes

Que se passe-t-il si nous avons un tableau de chaînes de caractères, et que nous voulons une sortie simple ; comme : String[] array = {"John", "Mahta", "Sara"} et nous voulons cette sortie sans crochets ni virgules : John Mahta Sara ?

3 votes

@Hengameh : Il y a plusieurs autres façons de faire, mais ma préférée est celle-ci : javahotchocolate.com/notes/java.html#arrays-tostring .

5 votes

FYI, Arrays.deepToString() n'accepte qu'un Object [] (ou un tableau de classes qui étendent Object comme Integer donc il ne fonctionnera pas sur un tableau primitif de type int [] . Mais Arrays.toString(<int array>) fonctionne bien pour les tableaux primitifs.

411voto

Limbic System Points 2442

Vérifiez toujours les bibliothèques standard en premier.

import java.util.Arrays;

Alors, essayez :

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

ou si votre tableau contient d'autres tableaux comme éléments :

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

0 votes

Que se passe-t-il si nous avons un tableau de chaînes de caractères, et que nous voulons une sortie simple ; comme : String[] array = {"John", "Mahta", "Sara"} et nous voulons cette sortie sans crochets ni virgules : John Mahta Sara ?

1 votes

@Hengameh Il suffit de stocker Arrays.toString(array) dans une variable de type chaîne de caractères, puis de supprimer les accolades par la méthode replace de Java.

22 votes

@Hengameh Aujourd'hui avec Java 8 : String.join(" ", Arrays.asList(array)) . doc

112voto

Russ Bateman Points 6868

C'est bon à savoir, cependant, pour ce qui est de "toujours vérifier les bibliothèques standard d'abord", je ne serais jamais tombé sur l'astuce du Arrays.toString( myarray )

--puisque je me concentrais sur le type de myarray pour voir comment faire. Je ne voulais pas avoir à itérer à travers la chose : je voulais un appel facile pour que le résultat soit similaire à ce que je vois dans le débogueur d'Eclipse et myarray.toString() ne le faisait tout simplement pas.

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

107voto

Eric Baker Points 61

Dans le JDK1.8, vous pouvez utiliser des opérations d'agrégation et une expression lambda :

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

43voto

Ross Points 4080

Si vous utilisez Java 1.4, vous pouvez plutôt faire :

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

(Cela fonctionne aussi en 1.5+, bien sûr).

41 votes

Malheureusement, cela ne fonctionne qu'avec des tableaux d'objets, pas avec des tableaux de primitives.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X