Quitar espacios en blanco inecesarios de un String.

    public String quitaEspacios(String texto) {
        java.util.StringTokenizer tokens = new java.util.StringTokenizer(texto);
        texto = "";
        while(tokens.hasMoreTokens()){
            texto += " "+tokens.nextToken();
        }
        texto = texto.toString();
        texto = texto.trim();
        return texto;
    }

segunda versión:

gracias a: azamudio.
    public String quitaEspacios(String texto) {
        java.util.StringTokenizer tokens = new java.util.StringTokenizer(texto);
        StringBuilder buff = new StringBuilder();
        while (tokens.hasMoreTokens()) {
            buff.append(" ").append(tokens.nextToken());
        }
        return buff.toString().trim();
    }

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

StringBuilder

Sería mucho más eficiente si usaras un StringBuilder y le vas dando append() en vez de concatenar con " " + tokens.nextToken(); busca en Google acerca de concatenar en Java con el "+", es bastante ineficiente en memoria y velocidad.

Por otra parte, sobra el trim() del final porque los tokens no traen espacios al principio ni al final, asi que el trim termina no haciendo nada pero tuvo que analizar el String para no hacer nada.

Imagen de rodrigo salado anaya

de nuevo.

otra ves por las prisas, se revolvieron las ideas y corte y pegue sin ver. gracias si cheque los de StringBuilder y en la doc de java me recomiendan lo mismo.

Quitar doble espacio a mas

Hola amigos de java quisiera saber como puedo quitar doble espacio o mas de una cadena y solo que se quede con un espacio.

Ayúdenme por favor

En esta pagina por ejemplo hace lo que estoy buscando, estaba intentando ingresar con varios espacios y cuando lo guardo me sale en uno

Uh? No entendí. Lo que puso

Uh? No entendí. Lo que puso Rodrigo te funciona y hace lo que quieres pero ... quieres ayuda? En que?

Si, lo que hace este código es quitar espacios innecesarios y deja solo uno. ¿Cual es el problema?

Usa replaceAll

" a            b    c                d".replaceAll("  ", " "); Eso te regresa a b c d

Espacios en blanco

Hola OscarRyz:
Me dices ese codigo quita los espacios innecesarios y deja solo uno.
Si es asi es lo que buscaba, es qoe lo que pasa que algunos usuarios teclean y aumentan espacion innecesarios y lo que queria era validar para que solo este un espacio.

Voy a probarlo y les comento que tal me fue y disculpen si no me hice entender.

PDT:
Me gusta esta comunidad

Imagen de ezamudio

!replaceAll

Ese replaceAll no cubre todos los casos. Si pones tres espacios entre dos palabras, deja dos, no uno. De hecho tiene broncas con cantidades nones de espacios (si hay 5, deja 3), y de hecho si ejecuto ese código " a            b    c                d".replaceAll("  ", " ") me devuelte " a      b  c        d" (todo esto lo probé en groovysh y en el REPL de Scala y me da lo mismo; compilando Java también me da varios espacios en medio).

@elmachu.18 No sé, en

@elmachu.18

No sé, en realidad no he ejecutado el código, pensé que tu ya lo habías hecho. Desde un análisis estático del código ( o sea simple vista ) parece que es lo que quieres, pero ¿porque no lo ejecutas y sales de duda?

@jdd && @ezamudio

Para que replaceAll funcione hay que decirle que si encuentra un espacio seguido de muchos más espacios ( todo esto lo probé en Ryz :D :D :D /* no pude evitarlo */ )

$cat ReplaceTest.ryz
demo.ReplaceTest {
    main()  {
        "[    a            b    c                d     ]    ".replaceAll(" +", " ").println()
    }
}
$java -jar ryzc-20120106.jar ReplaceTest.ryz
$java -cp .:ryzc-20120106.jar demo.ReplaceTest
[ a b c d ]
Imagen de ezamudio

eso sí funciona

Siempre olvido que el primer argumento de replaceAll es una regex. " a            b    c                d".replaceAll(" +", " ") me da " a b c d".

Ya lo probe

Hola amigo OscarRyz: ya probe el codigo:
Cuando ingreso un texto con espacio me quita todo el espacio y me devuelve la cadena todo junto.
Lo que estoy buscando es que solo me permita o convertir que de palabra en palabra solo lo separe un espacio no 2.

PDT:
Este codigo lo ejecuto en el evento Keytyped de JtextField asi:
txtproducto.setText(quitaEspacios(txtproducto.getText()));

Espero tu pronta respuesta amigo OscarRyz.

problemas al convertir a mayusculas

Hola amigos de java porque cuando utilizo toUpperCase() para convertir a mayusculas y quiero retroceder el cursor no puedo y simepre lo pone al final

Imagen de sr.bug

Por que no utilizar simplemente

 x = " a            b    c                d";
 x=x.replaceAll(" +", " ");
 x=x.trim();

Si no me equivoco esto si regresaria "a b c d"

Imagen de rodrigo salado anaya

Correcto, un regex lo soluciona mejor.

Ahora lo aria así, pero hace 5 años no tenia tan pulido esos conocimientos. Saludos.

Imagen de sr.bug

Valgame jajaja

Ni en cuenta que este post era del 2009

Imagen de Shadonwk

Excelente

En efecto, una simple regex soluciona todo, justamente ahorita tenia la necesidad y lo había echo con un StringTokenizer sin embargo me dio curiosidad y llegue directito aquí :D

Saludos.