Conversions de tableau en chaîne

1. Vue d'ensemble

Dans ce court didacticiel, nous allons examiner la conversion d'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'y a pas de méthode directe pour effectuer cette conversion.

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

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

Arrays.toString () renvoie une chaîne avec le contenu du tableau d'entrée. 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 génial que la méthode Arrays.toString (int []) nous commande si bien cette tâche, 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 avec StringBuilder.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 place Integer.valueOf (intArray [i]) lors de l'ajout à notre StringBuilder .

2.2. API Java Streams

Java 8 et supérieur propose la méthode String.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éthode Collectors.joining () de l'API Java Streams qui joint les chaînes du Stream 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 ()

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

La classe StringUtils a plusieurs méthodes StringUtils.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 classe Joiner . La classe Joiner offre une API fluide et fournit une poignée de méthodes d'assistance pour joindre des données.

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

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 avons parfois besoin de diviser une chaîne en un tableau qui contient un sous-ensemble de chaîne d'entrée divisé par le délimiteur spécifié, voyons comment nous pouvons le faire aussi.

3.1. String.split ()

Tout d'abord, commençons par fractionner l'espace blanc à l'aide de la méthode String.split () sans délimiteur:

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

Ce qui produit:

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

3.2. StringUtils.split ()

Deuxièmement, regardons à nouveau la classe StringUtils de la bibliothèque Commons Lang d'Apache.

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

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

Ce qui se traduit par:

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

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

3.3. Splitter.split ()

Enfin, nous pouvons également utiliser Guava avec son API Splitter fluent:

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 Java Core et des bibliothèques d'utilitaires populaires.

Bien sûr, la mise en œuvre de tous ces exemples et extraits de code peut être trouvée sur GitHub.