Como remover espaços em branco duplicados (incluindo guias, novas linhas, espaços, etc ...) em uma string usando Java?
Como remover espaços em branco duplicados (incluindo guias, novas linhas, espaços, etc ...) em uma string usando Java?
Respostas:
Como isso:
yourString = yourString.replaceAll("\\s+", " ");
Por exemplo
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
saídas
lorem ipsum dolor sit.
O que isso \s+
significa?
\s+
é uma expressão regular. \s
corresponde a um espaço, tabulação, nova linha, retorno de carro, alimentação de formulário ou tab vertical e +
diz "um ou mais desses". Portanto, o código acima recolherá todos os "substrings de espaço em branco" com mais de um caractere, com um único caractere de espaço.
Origem: Java: Removendo Espaços em Branco Duplicados em Strings
\s+
mas o que significa 2 barra invertida \\?
"\\"
representa a cadeia que consiste em uma única barra invertida. Então, para representar \s+
você escreve "\\s+"
.
Você pode usar o regex
(\s)\1
e
substitua-o por $1
.
Código Java:
str = str.replaceAll("(\\s)\\1","$1");
Se a entrada for, "foo\t\tbar "
você terá "foo\tbar "
como saída.
Mas, se a entrada for, "foo\t bar"
ela permanecerá inalterada, pois não possui caracteres de espaço em branco consecutivos.
Se você tratar todos os caracteres de espaço em branco (espaço, guia vertical, guia horizontal, retorno de carro, alimentação de formulário, nova linha) como espaço, poderá usar o seguinte regex para substituir qualquer número de espaços em branco consecutivos por um único espaço:
str = str.replaceAll("\\s+"," ");
Mas se você deseja substituir dois espaços em branco consecutivos por um único espaço, faça o seguinte:
str = str.replaceAll("\\s{2}"," ");
Tente isso - você precisa import java.util.regex.*;
Pattern pattern = Pattern.compile("\\s+");
Matcher matcher = pattern.matcher(string);
boolean check = matcher.find();
String str = matcher.replaceAll(" ");
Onde string
está sua string na qual você precisa remover espaços em branco duplicados
oi a maneira mais rápida (mas não a mais bonita) que encontrei é
while (cleantext.indexOf(" ") != -1)
cleantext = StringUtils.replace(cleantext, " ", " ");
isso está correndo muito rápido no android, em frente a um regex
String str = " Text with multiple spaces ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
Embora seja tarde demais, eu encontrei uma solução melhor (que funciona para mim) que substituirá todos os espaços em branco consecutivos do mesmo tipo por um espaço em branco desse tipo. Isso é:
Hello!\n\n\nMy World
será
Hello!\nMy World
Observe que ainda existem espaços em branco iniciais e finais. Então, minha solução completa é:
str = str.trim().replaceAll("(\\s)+", "$1"));
Aqui, trim()
substitui todas as cadeias de espaço em branco à esquerda e à direita por "". (\\s)
é para capturar \\s
(ou seja, espaços em branco como '', '\ n', '\ t') no grupo # 1 . +
sign é para combinar 1 ou mais token anterior. Assim, (\\s)+
podem haver caracteres consecutivos (1 ou mais) entre qualquer caractere de espaço em branco ('', '\ n' ou '\ t'). $1
é para substituir as cadeias correspondentes pelo grupo nº 1 (que contém apenas 1 caractere de espaço em branco) do tipo correspondente (que é o caractere de espaço em branco único correspondente). A solução acima mudará assim:
Hello!\n\n\nMy World
será
Hello!\nMy World
Eu não encontrei minha solução acima aqui, então eu a publiquei.
Se você deseja se livrar de todos os espaços em branco externos iniciais e finais, você deve fazer algo assim:
// \\A = Start of input boundary
// \\z = End of input boundary
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");
Em seguida, você pode remover as duplicatas usando as outras estratégias listadas aqui:
string = string.replaceAll("\\s+"," ");
Isso pode ser possível em três etapas: