Respuestas:
El primero coincide con un solo espacio en blanco, mientras que el segundo coincide con uno o varios espacios en blanco. Son los llamados cuantificadores de expresión regular y realizan coincidencias como esta (tomadas de la documentación ):
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
Esas dos replaceAll
llamadas siempre producirán el mismo resultado, independientemente de cuál x
sea. Sin embargo, es importante tener en cuenta que las dos expresiones regulares no son iguales:
\\s
- coincide con un solo carácter de espacio en blanco \\s+
- coincide con la secuencia de uno o más caracteres de espacio en blanco.En este caso, no importa, ya que está reemplazando todo con una cadena vacía (aunque sería mejor usarla \\s+
desde el punto de vista de la eficiencia). Si estuviera reemplazando con una cadena no vacía, los dos se comportarían de manera diferente.
En primer lugar, debe comprender que la salida final de ambas declaraciones será la misma, es decir, eliminar todos los espacios de la cadena dada.
Sin embargo x.replaceAll("\\s+", "");
, será una forma más eficiente de recortar espacios (si la cadena puede tener múltiples espacios contiguos) debido a que potencialmente hay menos reemplazos debido al hecho de que regex\\s+
coincide con 1 o más espacios a la vez y los reemplaza con una cadena vacía.
Entonces, aunque obtenga el mismo resultado de ambos, es mejor usar:
x.replaceAll("\\s+", "");
La primera expresión regular coincidirá con un carácter de espacio en blanco. La segunda expresión regular coincidirá a regañadientes con uno o más caracteres de espacio en blanco. Para la mayoría de los propósitos, estas dos expresiones regulares son muy similares, excepto en el segundo caso, la expresión regular puede coincidir con más de la cadena, si evita que la coincidencia de expresiones regulares falle. de http://www.coderanch.com/t/570917/java/java/regex-difference
\s+
, no \s+?
como la otra pregunta.