2012-08-24 15 views
7

Duplicar posibles:
Strip Leading and Trailing Spaces From Java Stringespacios Eliminación al final de una cadena en Java

Cuando la importación de datos a una aplicación que necesito para deshacerse de los espacios al final de ciertas secuencias pero no aquellos al principio, así que no puedo usar trim() ... he creado un método:

public static String quitarEspaciosFinal(String cadena) { 
    String[] trozos = cadena.split(" "); 
    String ultimoTrozo = trozos[trozos.length-1]; 
    return cadena.substring(0,cadena.lastIndexOf(ultimoTrozo.charAt(ultimoTrozo.length()-1))+1); 
    } 

donde cadena es la cadena que tengo para transformar ...

lo tanto, si la Cadena = "1234" este método volvería "1234" ...

Me gustaría saber si hay una manera más eficiente manera de hacer esto ...

+0

¿La cadena es solo una palabra, o puede ser una oración? – oopsi

+0

@oopsi: no importa en realidad ^^ – m0skit0

Respuesta

21

puede utilizar replaceAll() método de la cadena, con la expresión regular \s+$:

return cadena.replaceAll("\\s+$", ""); 

Si sólo desea eliminar espacios reales (no tabulaciones ni nuevas líneas), reemplace \\s por un espacio en el re gex.

+3

No usaría * pero +. Inútil reemplazar 0 espacios;) – m0skit0

+0

'replaceFirst' serviría aquí también. –

+0

¡De nada! – kgautron

6
public static String replaceAtTheEnd(String input){ 
    input = input.replaceAll("\\s+$", ""); 
    return input; 
} 
+2

No usaría * pero +. Inútil reemplazar 0 espacios;) – m0skit0

+1

@ m0skit0 :) Fue primero +, luego edito a *, no tengo idea de por qué :). thx aunque – Eugene

8
String s = " this has spaces at the beginning and at the end  "; 
    String result = s.replaceAll("\\s+$", ""); 
4

lo haría así:

public static String trimEnd(String s) 
{ 
    if (s == null || s.length() == 0) 
     return s; 
    int i = s.length(); 
    while (i > 0 && Character.isWhitespace(s.charAt(i - 1))) 
     i--; 
    if (i == s.length()) 
     return s; 
    else 
     return s.substring(0, i); 
} 

Es mucho más detallado que el uso de una expresión regular, pero es probable que sea más eficiente.

+0

¿Puedo saber el motivo del voto a favor? –

+0

No estaría tan seguro acerca de la eficiencia (las expresiones regulares podrían codificarse en código nativo). Y es inútil reinventar la rueda, en realidad. ¿Por qué codificar algo manualmente que ya puede hacer por las bibliotecas? Puede reinventar la rueda solo si lo que está disponible no le conviene (o es demasiado lento). Optimizar más tarde;) Y en realidad eliminé el voto a favor: P – m0skit0

+0

Obviamente, la única forma de estar seguro de la eficacia es probar en contra de un conjunto de datos significativo. Dicho esto, es probable que una expresión regular pague por su generalidad: por ejemplo, los motores de expresiones regulares normalmente traducen expresiones de entrada para mayor eficiencia, que es un paso que mi versión no tiene que realizar. En cuanto a las bibliotecas externas, tiendo a estar de acuerdo contigo, pero sigue siendo una compensación entre mantener un pequeño fragmento de código y hacer un seguimiento de otra dependencia más. ¡Por qué a veces cuesta menos codificar y depurar algo por ti mismo que buscar una solución preparada! –

Cuestiones relacionadas