Quelle est la différence entre les deux expressions suivantes?
x = x.replaceAll("\\s", "");
x = x.replaceAll("\\s+", "");
java
regex
string
quantifiers
mpluse
la source
la source
Réponses:
Le premier correspond à un seul espace blanc, tandis que le second correspond à un ou plusieurs espaces. Ce sont les soi-disant quantificateurs d'expressions régulières, et ils effectuent des correspondances comme celle-ci (extraite de la documentation ):
la source
Ces deux
replaceAll
appels produiront toujours le même résultat, quoi qu'il enx
soit. Cependant, il est important de noter que les deux expressions régulières ne sont pas les mêmes:\\s
- correspond à un seul caractère d'espacement\\s+
- correspond à la séquence d'un ou plusieurs caractères d'espacement.Dans ce cas, cela ne fait aucune différence, car vous remplacez tout par une chaîne vide (bien qu'il serait préférable d'utiliser
\\s+
du point de vue de l'efficacité). Si vous remplaçiez par une chaîne non vide, les deux se comporteraient différemment.la source
Tout d'abord, vous devez comprendre que la sortie finale des deux instructions sera la même, c'est-à-dire pour supprimer tous les espaces d'une chaîne donnée.
Cependant, ce
x.replaceAll("\\s+", "");
sera un moyen plus efficace de rogner les espaces (si la chaîne peut avoir plusieurs espaces contigus) en raison de potentiellement moins de remplacements en raison du fait que regex\\s+
correspond à 1 ou plusieurs espaces à la fois et les remplace par une chaîne vide.Donc, même si vous obtenez le même résultat des deux, il est préférable d'utiliser:
la source
Le premier regex correspondra à un caractère d'espacement. La seconde expression régulière correspondra à contrecœur à un ou plusieurs caractères d'espacement. Dans la plupart des cas, ces deux expressions régulières sont très similaires, sauf dans le second cas, l'expression régulière peut correspondre à une plus grande partie de la chaîne, si elle empêche la correspondance d'expression régulière d'échouer. sur http://www.coderanch.com/t/570917/java/java/regex-difference
la source
\s+
, pas\s+?
comme cette autre question.