Busca rápida, simple en Java para cambiar esta cadena
" hello there "
a algo que se parece a este
"hello there"
donde puedo reemplazar todos aquellos espacios múltiples con un solo espacio, excepto yo también quiero uno o más espacios al principio de la cadena que se ha ido.
Algo como esto me pone en parte allí
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
pero no del todo.
- Usted debería considerar la posibilidad de aceptar una respuesta. Esto hace que sea mucho más fácil para las personas que llegan a la página después de elegir una solución definitiva.
- acabo de añadir una nueva respuesta para su pregunta. Espero que se solucione tu problema
Intente esto:
Véase también
No
trim()
regexTambién es posible hacer esto con un solo
replaceAll
, pero esto es mucho menos legible que latrim()
solución. No obstante, es siempre aquí sólo para mostrar lo que regex puede hacer:Hay 3 suplentes:
^_+
: cualquier secuencia de espacios en el principio de la cadena$1
, que captura la cadena vacía_+$
: cualquier secuencia de espacios en blanco al final de la cadena$1
, que captura la cadena vacía(_)+
: cualquier secuencia de espacios que coincide con ninguno de los de arriba, significa que está en el medio$1
, que captura un solo espacioVéase también
trim()
y, a continuación,replaceAll()
utiliza menos memoria que hacerlo de la otra manera alrededor. No por mucho, pero si esto se llama, muchas, muchas veces, podría agregar, especialmente si hay una gran cantidad de «regulable espacio en blanco». (Trim()
realmente no deshacerse del espacio extra – simplemente lo oculta moviendo los valores de inicio y fin. El subyacentechar[]
permanece sin cambios.)( ) +
o( ){2,}
debe ser un (muy) poco más eficiente 😉\\s
reemplazará cualquier grupo de los espacios en blanco con el carácter deseado..trim().replaceAll(" +", " ")
(con dos espacios) es más rápido que.trim().replaceAll(" +", " ")
(con un espacio). Me encontré pruebas de tiempo en las cadenas que sólo había una sola espacios y todos los espacios del doble, y en el que venía muy rápido tanto al hacer un mucho de las operaciones (en millones o más, dependiendo del entorno).Sólo se necesita una:
donde coincidan uno o más espacios y reemplazarlos con un solo espacio y, a continuación, recorte de espacios en blanco al principio y al final (en realidad se podría invertir por primera recorte y, a continuación, juego de hacer el regex rápido como alguien señaló).
A la prueba tratar rápidamente:
y volverá:
+
con{2,}
.Utilizar Apache commons
StringUtils.normalizeSpace(String str)
método. Ver docs aquíEste a mi me funciono perfectamente :
sValue = sValue.trim().replaceAll("\\s+", " ");
Para eliminar espacios al principio y al final de la Cadena, utilice
String#trim()
método. Y, a continuación, utilizar sumytext.replaceAll("( )+", " ")
.Primero puede utilizar
String.trim()
y, a continuación, aplicar el regex comando reemplazar en el resultado.Esto coincidirá con más de un espacio.
De SALIDA:
Probar este.
Código De Ejemplo
SALIDA
Primera reemplazará a todos los espacios con un solo espacio. Que tenemos que supone hacer recorte de
String
porque a Partir de laString
y al Final de laString
reemplazará el todo el espacio con el único espacio siString
tiene espacios en el arranque de laString
y al Final de laString
Así que tenemos que recortar. De obtener su deseadoString
.trim()
Quita sólo el líder & espacios.
De Java Doc,
«Devuelve una cadena cuyo valor es de esta cadena, con cualquier iniciales y finales en los espacios en blanco eliminado.»
«D ev Dum mi»
replace(), replaceAll()
Reemplaza todas las cadenas vacías en la palabra,
De salida:
Nota: «\s+» es la expresión regular similar a la del espacio vacío carácter.
Referencia : https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html
Usted podría utilizar lookarounds también.
O
<space>(?= )
coincide con un carácter de espacio, que es seguido por otro de carácter de espacio. Así, en los espacios consecutivos, coincidiría con todos los espacios, excepto el último, ya que no es seguido por un carácter de espacio. Este dejando un espacio único para espacios consecutivos después de la operación de eliminación.Ejemplo:
reducir los espacios de primera
mayúscula la primera letra en minúscula y todo lo demás
Esto funcionó para mí
donde el filtro es la siguiente función y la exploración es la cadena de entrada:
usted debe hacer esto de esta
poner + dentro de paréntesis.
Versión del flujo, filtros de espacios y tabulaciones.
Ver
String.replaceAll
.Utilizar el regex
"\s"
y reemplazar con" "
.A continuación, utilizar
String.trim
.new String(" hello there ").trim().replaceAll("\\s+", " ")
comprobar esto…
Si la Cadena contiene solo espacio, a continuación, reemplazar() no reemplazar,
Si los espacios son más de uno, a Continuación, reemplazar() realiza la acción y elimina spacess.
Para contar el número de espacios en una Cadena.
Patrón.cita(«?») devuelve literal de Cadena de patrón.
Mi método antes de encontrar la segunda respuesta de usar regex como una solución mejor. Tal vez alguien las necesidades de este código.
\s
representa en expresiones regulares (espacio, tabulador, nueva línea, la forma de alimentación).Hola perdón por la demora!
Aquí es la mejor y la mayoría de la eficiencia de la respuesta que usted está buscando:
Por lo que su salida de este ejemplo será:
Mi nombre es kingkon.
Sin embargo este método eliminará también el «\n» que su cadena de mayo ha. Así que si usted no desea que acaba de utilizar este sencillo método:
Y si queremos eliminar los espacios iniciales y finales también acabo de agregar:
El siguiente código compacto cualquier espacio en blanco entre las palabras y eliminar cualquier en la cadena comienzo y el final de
Esta es la salida
a string with many spaces, a tab and a newline
Tenga en cuenta que cualquier caracteres no imprimibles incluidos los espacios, tabulaciones y saltos de línea será compactada o eliminado
Para obtener más información, consulte la documentación respectiva:
Sé replaceAll método es mucho más fácil, pero yo quería publicar esto.
La solución anterior es el algoritmo con la complejidad de O(n) sin utilizar cualquier función java.
Por favor, utilice a continuación el código