En ocasiones, trabajando con textos, necesitamos eliminar los espacios en blanco innecesarios, pero sólo a la izquierda o a la derecha, es decir los del inicio del texto o los del final.
Como comentamos antes, el método trim permite eliminar ambos, pero no sólo los del inicio o los del final. Otros lenguajes como PHP poseen las funciones ltrim (left trim) y rtrim (right trim).
- ltrim: elimina sólo los espacios en blanco en un String al comienzo de la cadena, por la izquierda.
- rtrim: elimina sólo los espacios en blanco en un String al final de la cadena, por la derecha.
En Java no disponemos de estos métodos, se considera que habitualmente queremos limpiar ambos lados y haremos uso de trim.
¿Cómo podemos simular rtrim y ltrim?
Tenemos varias opciones pero entre ellas os presento dos posibilidades:
- La primera se basa en recorrer la cadena empezando por el principio o por el final y eliminar los caracteres que se correspondan un un espacio en blanco.
- La segunda es el uso de patrones de expresiones regulares.
Opción 1 Sencillo pero útil
Creamos un método ltrim que recibe como parámetro la cadena de caracteres original, recorremos la cadena buscando el primer carácter que no es un espacio en blanco, cuando lo encontramos haciendo uso del método substring (que devuelve una subcadena) retornamos los caracteres desde el indicado hasta el final.
public static String ltrim(String s){
for (int i=0; i<s.length(); i++) {
if (s.charAt(i)!= ' ') {
return s.substring(i);
}
}
return "";
}
Haciendo uso del mismo razonamiento creamos rtrim que recibe como parámetro la cadena de caracteres original, la recorre en este caso desde el final buscando el primer carácter que no es un espacio en blanco.
public static String rtrim_for(String s){
for (int i=s.length()-1; i>=0; i--){
if (s.charAt(i)!= ' ')
return s.substring(0, i+1);
}
return "";
}
Opción 2 Necesitamos conocer el uso de expresiones regulares
Aplicando el uso de patrones, es tan simple como utilizar el método replaceAll con una expresión, para que sustituya los espacios en blanco al principio o al final por las comillas vacías "".
String sinEspaciosIzquierda = s.replaceAll("^\\s+", "");String sinEspaciosDerecha = s.replaceAll("\\s+$","");
⸎ ¿Qué representa cada carácter dentro del patrón?
\s - espacio en blanco
+ - uno o más caracteres
^ - inicio de la cadena
$ - fin de la cadena
No hay comentarios :
Publicar un comentario