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 ):
Greedy quantifiers
X? X, once or not at all
X* X, zero or more times
X+ X, one or more times
X{n} X, exactly n times
X{n,} X, at least n times
X{n,m} X, at least n but not more than m times
Reluctant quantifiers
X?? X, once or not at all
X*? X, zero or more times
X+? X, one or more times
X{n}? X, exactly n times
X{n,}? X, at least n times
X{n,m}? X, at least n but not more than m times
Possessive quantifiers
X?+ X, once or not at all
X*+ X, zero or more times
X++ X, one or more times
X{n}+ X, exactly n times
X{n,}+ X, at least n times
X{n,m}+ X, at least n but not more than m times
Ces deux replaceAll
appels produiront toujours le même résultat, quoi qu'il en x
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.
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:
x.replaceAll("\\s+", "");
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
\s+
, pas \s+?
comme cette autre question.