Fractionner une chaîne en Java

Fractionner une chaîne en Java

1. introduction

Le fractionnement deStrings est une opération très fréquente; ce tutoriel rapide se concentre sur certaines des API que nous pouvons utiliser pour le faire simplement en Java.

2. String.split()

Commençons par la bibliothèque principale - la classeString elle-même propose une méthodesplit() - qui est très pratique et suffisante pour la plupart des scénarios. Il divise simplement lesString donnés en fonction du délimiteur, renvoyant un tableau deStrings.

Regardons quelques exemples. Nous allons commencer par séparer par une virgule:

String[] splitted = "peter,james,thomas".split(",");

Soyons séparés par un espace:

String[] splitted = "car jeep scooter".split(" ");

Soyons également séparés par un point:

String[] splitted = "192.168.1.178".split("\\.")

Divisons maintenant par plusieurs caractères - une virgule, un espace et un trait d'union via l'expression régulière:

String[] splitted = "b a, e, l.d u, n g".split("\\s+|,\\s*|\\.\\s*"));

3. StringUtils.split()

Le package Common Lang d'Apache fournit une classeStringUtils - qui contient une méthodesplit() sûre pour les valeurs nulles, qui se divise en utilisant des espaces comme délimiteur par défaut:

String[] splitted = StringUtils.split("car jeep scooter");

De plus, il ignore les espaces supplémentaires:

String[] splitted = StringUtils.split("car   jeep  scooter");

4. Splitter.split()

Enfin, il existe également une belle APISplitter couramment utilisée dans Guava:

List resultList = Splitter.on(',')
  .trimResults()
  .omitEmptyStrings()
  .splitToList("car,jeep,, scooter");

5. Diviser et couper

Parfois, unString donné contient des espaces de début, de fin ou supplémentaires autour du délimiteur. Voyons comment nous pouvons gérer le fractionnement de l'entrée et le découpage des résultats en une seule fois.

Disons que nous avons ceci comme entrée:

String input = " car , jeep, scooter ";

Pour supprimer des espaces supplémentaires avant et / ou après le délimiteur, nous pouvons effectuer un fractionnement et un découpage à l'aide de regex:

String[] splitted = input.trim().split("\\s*,\\s*");

Ici, la méthodetrim() supprime les espaces de début et de fin dans la chaîne d'entrée, et l'expression régulière elle-même gère les espaces supplémentaires autour du délimiteur.

Nous pouvons obtenir le même résultat en utilisant les fonctionnalités de Java 8Stream:

String[] splitted = Arrays.stream(input.split(","))
  .map(String::trim)
  .toArray(String[]::new);

6. Conclusion

String.split() est généralement suffisant. Cependant, pour les cas plus complexes, nous pouvons utiliser la classeStringUtils basée sur les langages communs d’Apache, ou les API Guava propres et flexibles.

Et, comme toujours, le code de l'article est disponibleover on GitHub.