Expressions régulières \ s et \ s + en Java

1. Vue d'ensemble

La substitution de chaînes est une opération standard lorsque nous traitons des chaînes en Java.

Grâce à la méthode pratique replaceAll () de la classe String , nous pouvons facilement effectuer une substitution de chaîne avec des expressions régulières. Cependant, les expressions peuvent parfois prêter à confusion, par exemple \ s et \ s +.

Dans ce court didacticiel, nous examinerons la différence entre les deux expressions régulières à travers des exemples.

2. La différence entre \ s et \ s +

L'expression régulière \ s est une classe de caractères prédéfinie. Il indique un seul caractère d'espacement. Passons en revue l'ensemble des caractères d'espaces:

[ \t\n\x0B\f\r]

Le signe plus + est un quantificateur gourmand, ce qui signifie une ou plusieurs fois. Par exemple, l'expression X + correspond à un ou plusieurs caractères X.

Par conséquent, l'expression régulière \ s correspond à un seul caractère d'espacement, tandis que \ s + correspond à un ou plusieurs caractères d'espacement.

3. replaceAll () Avec un remplacement non vide

Nous avons appris la signification des expressions régulières \ s et \ s + .

Voyons maintenant comment la méthode replaceAll () se comporte différemment avec ces deux expressions régulières.

Nous utiliserons une chaîne comme texte d'entrée pour tous les exemples:

String INPUT_STR = "Text With Whitespaces! ";

Essayons de passer \ s à la méthode replaceAll () comme argument:

String result = INPUT_STR.replaceAll("\\s", "_"); assertEquals("Text___With_____Whitespaces!___", result);

La méthode replaceAll () recherche des caractères d'espacement uniques et remplace chaque correspondance par un trait de soulignement. Nous avons onze caractères d'espacement dans le texte d'entrée. Ainsi, onze remplacements auront lieu.

Ensuite, passons l'expression régulière \ s + à la méthode replaceAll () :

String result = INPUT_STR.replaceAll("\\s+", "_"); assertEquals("Text_With_Whitespaces!_", result);

En raison du quantificateur gourmand + , la méthode replaceAll () correspondra à la plus longue séquence de caractères d'espace blanc contigus et remplacera chaque correspondance par un trait de soulignement.

Dans notre texte d'entrée, nous avons trois séquences de caractères d'espace blanc contigus. Par conséquent, chacun des trois deviendra un trait de soulignement.

4. replaceAll () Avec un remplacement vide

Une autre utilisation courante de la méthode replaceAll () consiste à supprimer les modèles correspondants du texte d'entrée. Nous le faisons généralement en passant une chaîne vide en remplacement de la méthode.

Voyons quel résultat nous obtiendrons si nous supprimons les caractères d' espacement en utilisant la méthode replaceAll () avec l' expression régulière \ s :

String result1 = INPUT_STR.replaceAll("\\s", ""); assertEquals("TextWithWhitespaces!", result1);

Maintenant, nous allons passer l'autre expression régulière \ s + à la méthode replaceAll () :

String result2 = INPUT_STR.replaceAll("\\s+", ""); assertEquals("TextWithWhitespaces!", result2); 

Comme le remplacement est une chaîne vide, les deux appels replaceAll () produisent le même résultat, même si les deux expressions régulières ont des significations différentes:

assertEquals(result1, result2);

Si nous comparons les deux appels replaceAll () , celui avec \ s + est plus efficace. C'est parce qu'il fait le travail avec seulement trois remplacements tandis que l'appel avec \ s fera onze remplacements.

5. Conclusion

Dans ce court article, nous avons découvert les expressions régulières \ s et \ s + .

Nous avons également vu comment la méthode replaceAll () se comportait différemment avec les deux expressions.

Comme toujours, le code est disponible sur sur GitHub.