Buscando una forma rápida y sencilla en Java para cambiar esta cadena
" hello there "
a algo que se parece a esto
"hello there"
donde reemplazo todos esos espacios múltiples con un solo espacio, excepto que también quiero que uno o más espacios al comienzo de la cadena desaparezcan.
Algo como esto me lleva en parte
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
pero no del todo.
Respuestas:
Prueba esto:
Ver también
String.trim()
Sin
trim()
expresiones regularesTambién es posible hacer esto con solo uno
replaceAll
, pero esto es mucho menos legible que latrim()
solución. No obstante, se proporciona aquí solo para mostrar lo que puede hacer la expresión regular:Hay 3 alternativas:
^_+
: cualquier secuencia de espacios al comienzo de la cadena$1
, que captura la cadena vacía_+$
: cualquier secuencia de espacios al final de la cadena$1
, que captura la cadena vacía(_)+
: cualquier secuencia de espacios que no coincida con ninguno de los anteriores, lo que significa que está en el medio$1
, que captura un solo espacioVer también
fuente
trim()
y luegoreplaceAll()
usa menos memoria que hacerlo al revés. No por mucho, pero si esto se llama muchas veces, podría sumar, especialmente si hay mucho "espacio en blanco recortable". (Trim()
En realidad no deshacerse del espacio extra - sólo lo oculta moviendo los valores inicial y final del Subyacente.char[]
Se mantiene sin cambios.)( ) +
o( ){2,}
debería ser un (muy) poco más eficiente;)\\s
reemplazará cualquier grupo de espacios en blanco con el carácter deseado..trim().replaceAll(" +", " ")
(con dos espacios) es más rápido que.trim().replaceAll(" +", " ")
(con un espacio). Realicé pruebas de temporización en cadenas que solo tenían espacios individuales y todos los espacios dobles, y fue mucho más rápido para ambos cuando hacía muchas operaciones (millones o más, dependiendo del entorno).Solo necesitas un:
donde empareja uno o más espacios y los reemplaza con un solo espacio y luego recorta los espacios en blanco al principio y al final (en realidad, podría invertir primero recortando y luego haciendo coincidir para que la expresión regular sea más rápida como alguien señaló).
Para probar esto rápidamente, intente:
y volverá:
fuente
Use el
StringUtils.normalizeSpace(String str)
método de Apache commons . Ver documentos aquífuente
Esto funcionó perfectamente para mí :
sValue = sValue.trim().replaceAll("\\s+", " ");
fuente
Esto coincidirá con más de un espacio.
SALIDA:
fuente
Para eliminar espacios al principio y al final de la cadena, utilice el
String#trim()
método. Y luego usa tumytext.replaceAll("( )+", " ")
.fuente
Primero puede usar
String.trim()
, y luego aplicar el comando regex replace en el resultado.fuente
El siguiente código compactará cualquier espacio en blanco entre las palabras y eliminará cualquiera al principio y al final de la cadena
Esto dará salida
a string with many spaces, a tab and a newline
Tenga en cuenta que los caracteres no imprimibles, incluidos espacios, pestañas y líneas nuevas, se compactarán o eliminarán
Para obtener más información, consulte la documentación respectiva:
fuente
Prueba este.
Código de muestra
SALIDA
Primero reemplazará todos los espacios con un solo espacio. De lo que tenemos que hacer para recortar
String
porque el inicio deString
y el final de laString
misma reemplazará todo el espacio con un solo espacio siString
tiene espacios en el inicioString
y el final de la, porString
lo que debemos recortarlos. De lo que obtienes tu deseadoString
.fuente
También puedes usar lookarounds.
O
<space>(?= )
coincide con un carácter de espacio seguido de otro carácter de espacio. Por lo tanto, en espacios consecutivos, coincidiría con todos los espacios excepto el último porque no está seguido por un carácter de espacio. Esto le deja un espacio único para espacios consecutivos después de la operación de eliminación.Ejemplo:
fuente
podar()
Elimina solo los espacios iniciales y finales.
De Java Doc, "Devuelve una cadena cuyo valor es esta cadena, con cualquier espacio en blanco inicial y final eliminado".
"D ev Dum my"
replace (), replaceAll ()
Reemplaza todas las cadenas vacías en la palabra,
Salida:
Nota: "\ s +" es la expresión regular similar al carácter de espacio vacío.
Referencia: https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html
fuente
Se han proporcionado muchas respuestas correctas hasta ahora y veo muchas votaciones positivas. Sin embargo, las formas mencionadas funcionarán pero no están realmente optimizadas o no son realmente legibles. Recientemente encontré la solución que le gustará a cada desarrollador.
Estás listo. Esta es una solución legible.
fuente
En Kotlin se vería así
fuente
reducir espacios primero
escribe en mayúscula la primera letra y en minúscula todo lo demás
fuente
fuente
Esto funciono para mi
donde filter sigue la función y scan es la cadena de entrada:
fuente
deberías hacerlo así
poner + dentro de corchetes redondos.
fuente
fuente
Ver
String.replaceAll
.Use la expresión regular
"\s"
y reemplace con" "
.Entonces usar
String.trim
.fuente
new String(" hello there ").trim().replaceAll("\\s+", " ")
Mira esto...
Si String contiene solo un espacio, entonces replace () no reemplazará,
Si los espacios son más de uno, la acción Reemplazar () realiza y elimina el espacio.
Para contar el número de espacios en una cadena.
Pattern .quote ("?") Devuelve la cadena de patrón literal.
fuente
Mi método antes de encontrar la segunda respuesta usando regex como una mejor solución. Quizás alguien necesita este código.
fuente
\s
significa en expresiones regulares (espacio, tabulación, nueva línea, avance de formulario).Versión Stream, filtra espacios y pestañas.
fuente
fuente
El método más simple para eliminar espacios en blanco en cualquier parte de la cadena.
fuente
La solución anterior es el algoritmo con la complejidad de O (n) sin usar ninguna función de Java.
fuente
Por favor use el siguiente código
fuente
Hola perdón por la demora! Aquí está la mejor y más eficiente respuesta que está buscando:
Entonces, la salida de este ejemplo será: Mi nombre es kingkon.
Sin embargo, este método eliminará también el "\ n" que puede tener su cadena. Entonces, si no quieres eso, solo usa este método simple:
Y si también desea eliminar los espacios iniciales y finales, simplemente agregue:
fuente
Sé que el método replaceAll es mucho más fácil, pero también quería publicar esto.
fuente
fuente