Como remover espaços em branco duplicados em string usando Java?

Como remover espaços em branco duplicados (incluindo guias, novas linhas, espaços, etc …) em uma string usando Java?

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 significa?

\s+ é uma expressão regular. \s corresponde a um espaço, guia, nova linha, retorno de carro, feed de formulário ou guia vertical e + diz “um ou mais desses”. Assim, o código acima irá recolher todas as “substrings de espaço em branco” por mais de um caractere, com um único caractere de espaço.


Fonte: Java: Removendo espaços em branco duplicados em cadeias

Você pode usar o regex

 (\s)\1 

e

substitua por $1 .

Código Java:

 str = str.replaceAll("(\\s)\\1","$1"); 

Se a input for "foo\t\tbar " você obterá "foo\tbar " como saída
Mas se a input for "foo\t bar" ela permanecerá inalterada porque 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 replace qualquer número de espaço em branco consecutivo por um único espaço:

 str = str.replaceAll("\\s+"," "); 

Mas se você quiser replace dois espaços em branco consecutivos por um único espaço, faça o seguinte:

 str = str.replaceAll("\\s{2}"," "); 

Tente isso – você tem que import java.util.regex.*;

  Pattern pattern = Pattern.compile("\\s+"); Matcher matcher = pattern.matcher(string); boolean check = matcher.find(); String str = matcher.replaceAll(" "); 

Onde string é sua string na qual você precisa remover espaços em branco duplicados

oi o mais rápido (mas não a maneira mais bonita) que eu 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 muito tarde, encontrei uma solução melhor (que funciona para mim) que replaceá todos os espaços em branco do mesmo tipo consecutivos por um espaço em branco de seu tipo. Isso é:

  Hello!\n\n\nMy World 

será

  Hello!\nMy World 

Observe que ainda há espaços em branco iniciais e finais. Então minha solução completa é:

 str = str.trim().replaceAll("(\\s)+", "$1")); 

Aqui, trim() substitui todas as strings de espaços em branco iniciais e finais por “”. (\\s) é para capturar \\s (que é espaços em branco como ”, ‘\ n’, ‘\ t’) no grupo # 1 . + sinal é para correspondência de 1 ou mais token anterior. Então (\\s)+ pode ser caracteres consecutivos (1 ou mais) entre quaisquer caracteres de espaço em branco (”, ‘\ n’ ou ‘\ t’). $1 é para replace as strings correspondentes pela string # 1 do grupo (que contém apenas 1 caractere de espaço em branco) do tipo correspondente (ou seja, o caractere de espaço em branco único que correspondeu). A solução acima irá mudar assim:

  Hello!\n\n\nMy World 

será

 Hello!\nMy World 

Eu não encontrei a minha solução acima aqui, então eu postei.

Se você quiser se livrar de todos os espaços em branco externos à esquerda e à direita, faça o seguinte:

 // \\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+"," "); 

Você também pode tentar usar o Tokenizador de String, para qualquer espaço, guia, nova linha e tudo. Uma maneira simples é

 String s = "Your Text Here"; StringTokenizer st = new StringTokenizer( s, " " ); while(st.hasMoreTokens()) { System.out.print(st.nextToken()); } 

Isso pode ser possível em três etapas:

  1. Converta a string em array de caracteres (ToCharArray)
  2. Candidate-se a loop no array charater
  3. Em seguida, aplique a function de substituição de string (Replace (“sting you want to replace”, “string original”));