Respuestas:
Me gusta esto:
yourString = yourString.replaceAll("\\s+", " ");
Por ejemplo
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
salidas
lorem ipsum dolor sit.
¿Qué significa eso \s+
?
\s+
Es una expresión regular. \s
coincide con un espacio, tabulación, nueva línea, retorno de carro, avance de formulario o tabulación vertical, y +
dice "uno o más de esos". Por lo tanto, el código anterior colapsará todas las "subcadenas de espacios en blanco" más de un carácter, con un solo carácter de espacio.
Fuente: Java: eliminación de espacios en blanco duplicados en cadenas
\s+
pero ¿qué significa 2 barras invertidas \\?
"\\"
representa la cadena que consiste en una barra invertida única. Entonces, para representarlo \s+
, escriba "\\s+"
.
Puedes usar la expresión regular
(\s)\1
y
reemplazarlo con $1
.
Código Java:
str = str.replaceAll("(\\s)\\1","$1");
Si la entrada es como la "foo\t\tbar "
obtendrá "foo\tbar "
,
pero si la entrada es "foo\t bar"
, permanecerá sin cambios porque no tiene ningún espacio en blanco consecutivo.
Si trata todos los caracteres de espacio en blanco (espacio, tabulación vertical, tabulación horizontal, retorno de carro, avance de formulario, nueva línea) como espacio, puede usar la siguiente expresión regular para reemplazar cualquier cantidad de espacio en blanco consecutivo con un solo espacio:
str = str.replaceAll("\\s+"," ");
Pero si desea reemplazar dos espacios en blanco consecutivos con un solo espacio, debe hacer:
str = str.replaceAll("\\s{2}"," ");
Prueba esto: tienes que import java.util.regex.*;
Pattern pattern = Pattern.compile("\\s+");
Matcher matcher = pattern.matcher(string);
boolean check = matcher.find();
String str = matcher.replaceAll(" ");
¿Dónde string
está su cadena en la que necesita eliminar los espacios en blanco duplicados?
hola la forma más rápida (pero no la más bonita) que encontré es
while (cleantext.indexOf(" ") != -1)
cleantext = StringUtils.replace(cleantext, " ", " ");
esto se está ejecutando bastante rápido en Android en lugar de una expresión regular
String str = " Text with multiple spaces ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
Aunque es demasiado tarde, he encontrado una mejor solución (que funciona para mí) que reemplazará todos los espacios en blanco consecutivos del mismo tipo con un espacio en blanco de su tipo. Es decir:
Hello!\n\n\nMy World
estarán
Hello!\nMy World
Observe que todavía hay espacios en blanco iniciales y finales. Entonces mi solución completa es:
str = str.trim().replaceAll("(\\s)+", "$1"));
Aquí, trim()
reemplaza todas las cadenas de espacios en blanco iniciales y finales con "". (\\s)
es para capturar \\s
(es decir, espacios en blanco como '', '\ n', '\ t') en el grupo # 1 . +
signo es para hacer coincidir 1 o más token anterior. Por (\\s)+
lo tanto, pueden ser caracteres consecutivos (1 o más) entre cualquier carácter de espacio en blanco ('', '\ n' o '\ t').$1
es para reemplazar las cadenas coincidentes con la cadena del grupo n. ° 1 (que solo contiene 1 carácter de espacio en blanco) del tipo coincidente (es decir, el carácter de espacio en blanco único que coincide). La solución anterior cambiará así:
Hello!\n\n\nMy World
estarán
Hello!\nMy World
No he encontrado mi solución anterior aquí, así que la he publicado.
Si desea deshacerse de todos los espacios en blanco extraños iniciales y finales, entonces desea hacer algo como esto:
// \\A = Start of input boundary
// \\z = End of input boundary
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");
Luego puede eliminar los duplicados utilizando las otras estrategias enumeradas aquí:
string = string.replaceAll("\\s+"," ");
Esto puede ser posible en tres pasos: