Conversions entre tableaux

Conversions entre tableaux

1. Vue d'ensemble

Dans ce court didacticiel, nous allons convertir un tableau de chaînes ou d’entiers en chaîne et inversement.

Nous pouvons y parvenir avec des classes d'utilitaires Java et Java vanilla provenant de bibliothèques couramment utilisées.

2. Convertir un tableau en chaîne

Parfois, nous devons convertir un tableau de chaînes ou d’entiers en chaîne, mais malheureusement, il n’existe pas de méthode directe pour effectuer cette conversion.

L'implémentation par défaut de la méthodetoString() sur un tableau renvoie quelque chose commeLjava.lang.String;@74a10858 qui nous informe uniquement du type de l'objet et du code de hachage.

Cependant, la classe utilitairejava.util.Arrays prend en charge la manipulation de tableaux et de chaînes, y compris une méthodetoString() pour les tableaux.

Arrays.toString() returns a string with the content of the input array. La nouvelle chaîne créée est une liste délimitée par des virgules des éléments du tableau, entourée de crochets («[]»):

String[] strArray = { "one", "two", "three" };
String joinedString = Arrays.toString(strArray);
assertEquals("[one, two, three]", joinedString);
int[] intArray = { 1,2,3,4,5 };
joinedString = Arrays.toString(intArray);
assertEquals("[1, 2, 3, 4, 5]", joinedString);

Et, bien que ce soit formidable que la méthodeArrays.toString(int[]) gère si bien cette tâche pour nous, comparons-la à différentes méthodes que nous pouvons implémenter nous-mêmes.

2.1. StringBuilder.append()

Pour commencer, voyons comment effectuer cette conversion avecStringBuilder.append():

String[] strArray = { "Convert", "Array", "With", "Java" };
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < strArray.length; i++) {
    stringBuilder.append(strArray[i]);
}
String joinedString = stringBuilder.toString();
assertEquals("ConvertArrayWithJava", joinedString);

De plus, pour convertir un tableau d'entiers, nous pouvons utiliser la même approche mais appeler à la placeInteger.valueOf(intArray[i]) w en ajoutant à nosStringBuilder.

2.2. API Java Streams

Java 8 et supérieur offre la méthodeString.join() qui produit une nouvelle chaîne en joignant des éléments et en les séparant avec le délimiteur spécifié, dans notre cas une chaîne vide:

String joinedString = String.join("", new String[]{ "Convert", "With", "Java", "Streams" });
assertEquals("ConvertWithJavaStreams", joinedString);

De plus, nous pouvons utiliser la méthodeCollectors.joining() de l'API Java Streams qui joint les chaînes desStream dans le même ordre que son tableau source:

String joinedString = Arrays
    .stream(new String[]{ "Convert", "With", "Java", "Streams" })
    .collect(Collectors.joining());
assertEquals("ConvertWithJavaStreams", joinedString);

2.3. StringUtils.join()

EtApache Commons Lang ne doit jamais être laissé à l'écart de telles tâches.

La classeStringUtils a plusieurs méthodesStringUtils.join() qui peuvent être utilisées pour changer un tableau de chaînes en une seule chaîne:

String joinedString = StringUtils.join(new String[]{ "Convert", "With", "Apache", "Commons" });
assertEquals("ConvertWithApacheCommons", joinedString);

2.4. Joiner.join()

Et pour ne pas être en reste,Guava accueille la même chose avec sa classeJoiner . LeJoiner class offre une API fluide et fournit une poignée de méthodes d'aide pour joindre des données.

Par exemple, nous pouvons ajouter un délimiteur ou ignorer les valeurs NULL:

String joinedString = Joiner.on("")
        .skipNulls()
        .join(new String[]{ "Convert", "With", "Guava", null });
assertEquals("ConvertWithGuava", joinedString);

3. Convertir une chaîne en tableau de chaînes

De même, nous devons parfois diviser une chaîne en un tableau contenant un sous-ensemble de chaîne d'entrée divisé par le délimiteur spécifié, voyons également comment nous pouvons le faire.

3.1. String.split()

Tout d'abord, commençons par fractionner les espaces à l'aide de la méthodeString.split() sans délimiteur:

String[] strArray = "loremipsum".split("");

Qui produit:

["l", "o", "r", "e", "m", "i", "p", "s", "u", "m"]

3.2. StringUtils.split()

Deuxièmement, revenons à la classeStringUtils de la bibliothèque Commons Lang d'Apache.

Parmi de nombreuses méthodes de sécurité nulle sur les objets chaîne, nous pouvons trouverStringUtils.split(). Par défaut, il suppose un délimiteur d'espaces:

String[] splitted = StringUtils.split("lorem ipsum dolor sit amet");

Ce qui résulte en:

["lorem", "ipsum", "dolor", "sit", "amet"]

Mais, nous pouvons également fournir un délimiteur si nous voulons.

3.3. Splitter.split()

Enfin, nous pouvons également utiliserGuava avec son API fluideSplitter:

List resultList = Splitter.on(' ')
    .trimResults()
    .omitEmptyStrings()
    .splitToList("lorem ipsum dolor sit amet");
String[] strArray = resultList.toArray(new String[0]);

Ce qui génère:

["lorem", "ipsum", "dolor", "sit", "amet"]

4. Conclusion

Dans cet article, nous avons illustré comment convertir un tableau en chaîne et inversement à l'aide de bibliothèques Java et d'utilitaires populaires.

Bien sûr, l'implémentation de tous ces exemples et extraits de code peut être trouvéeover on GitHub.