Qual é a diferença entre as duas expressões a seguir?
x = x.replaceAll("\\s", "");
x = x.replaceAll("\\s+", "");
java
regex
string
quantifiers
mpluse
fonte
fonte
Respostas:
O primeiro corresponde a um único espaço em branco, enquanto o segundo corresponde a um ou mais espaços em branco. Eles são os chamados quantificadores de expressão regular e realizam correspondências como esta (retiradas da documentação ):
fonte
Essas duas
replaceAll
chamadas sempre produzirão o mesmo resultado, independentemente do quex
seja. No entanto, é importante observar que as duas expressões regulares não são iguais:\\s
- corresponde a um único caractere de espaço em branco\\s+
- corresponde à sequência de um ou mais caracteres de espaço em branco.Nesse caso, não faz diferença, já que você está substituindo tudo por um string vazio (embora seja melhor usar
\\s+
do ponto de vista da eficiência). Se você estivesse substituindo por uma string não vazia, os dois se comportariam de maneira diferente.fonte
Em primeiro lugar, você precisa entender que a saída final de ambas as instruções será a mesma, ou seja, remover todos os espaços de uma determinada string.
No entanto,
x.replaceAll("\\s+", "");
será uma maneira mais eficiente de cortar espaços (se a string puder ter vários espaços contíguos) por causa do potencial menor número de substituições devido ao fato de que regex\\s+
corresponde a 1 ou mais espaços de uma vez e os substitui por string vazia.Portanto, embora você obtenha a mesma saída de ambos, é melhor usar:
fonte
A primeira regex corresponderá a um caractere de espaço em branco. A segunda regex irá relutantemente corresponder a um ou mais caracteres de espaço em branco. Para a maioria das finalidades, essas duas regexes são muito semelhantes, exceto no segundo caso, a regex pode corresponder mais da string, se impedir que a correspondência de regex falhe. de http://www.coderanch.com/t/570917/java/java/regex-difference
fonte
\s+
, não\s+?
como aquela outra pergunta.