¿Cuál es la diferencia entre las siguientes dos expresiones?
x = x.replaceAll("\\s", "");
x = x.replaceAll("\\s+", "");
java
regex
string
quantifiers
mpluse
fuente
fuente
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 ):
fuente
Esas dos
replaceAll
llamadas siempre producirán el mismo resultado, independientemente de cuálx
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.fuente
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:
fuente
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
fuente
\s+
, no\s+?
como la otra pregunta.