1. Información general
En este artículo rápido, revisaremos y discutiremos diferentes técnicas para eliminar el último carácter de una cadena.
2. Usando String.substring ()
La forma más sencilla es utilizar el método incorporado subcadena () de la clase String .
Para eliminar el último carácter de una Cadena dada , tenemos que usar dos parámetros: 0 como índice inicial y el índice del penúltimo carácter. Podemos lograr que llamando Cadena 's length () método y restar 1 del resultado.
Sin embargo, este método no es seguro para nulos y si usamos una cadena vacía, esto fallará.
Para superar los problemas con cadenas nulas y vacías, podemos envolver el método en una clase auxiliar:
public static String removeLastChar(String s)
Podemos refactorizar el código y usar Java 8:
public static String removeLastCharOptional(String s) { return Optional.ofNullable(s) .filter(str -> str.length() != 0) .map(str -> str.substring(0, str.length() - 1)) .orElse(s); }
3. Usando StringUtils.substring ()
En vez de reinventar la rueda, podemos utilizar StringUtils clase de Apache Commons Lang3 biblioteca, lo que ofrece útiles de Cuerda operaciones. Uno de ellos es un método substring () seguro para nulos , que maneja excepciones.
Para incluir StringUtils tenemos que actualizar nuestro archivo pom.xml :
org.apache.commons commons-lang3 3.0
StringUtils.substring () requiere tres parámetros: una Cadena dada , un índice del primer carácter (en nuestro caso será siempre 0) e índice del penúltimo carácter. Nuevamente, podemos simplemente usar el método length () y restar 1:
String TEST_STRING = "abcdef"; StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1);
Sin embargo, esta operación no vuelve a ser nula. Sin embargo , funcionará bien con cadenas vacías .
4. Usando StringUtils.chop ()
La clase StringUtils proporciona el método chop () que funciona bien con todos los escenarios de borde: cadenas vacías y nulas .
Es muy fácil de usar y solo requiere un parámetro: el String. Su único propósito es eliminar el último carácter. Nada más y nada menos:
StringUtils.chop(TEST_STRING);
5. Uso de expresiones regulares
También podemos eliminar el último carácter (o cualquier número de caracteres) de una cadena haciendo un buen uso de las expresiones regulares.
Por ejemplo, podemos usar el método replaceAll () de la propia clase String , que toma dos parámetros: la expresión regular y la cadena de reemplazo :
TEST_STRING.replaceAll(".$", "");
Tenga en cuenta que, debido a que estamos llamando a un método en la cadena , la operación, por supuesto, no es segura para nulos .
Además, replaceAll () y la expresión regex pueden ser complejas a primera vista. Puede leer más sobre expresiones regulares aquí, pero para hacer que la lógica sea un poco más fácil de usar, podemos envolverla en una clase auxiliar:
public static String removeLastCharRegex(String s) { return (s == null) ? null : s.replaceAll(".$", ""); }
Tenga en cuenta que si una cadena termina con una nueva línea, el método anterior fallará como "." en regex coincide con cualquier carácter excepto los terminadores de línea.
Finalmente, reescribamos la implementación con Java 8 :
public static String removeLastCharRegexOptional(String s) { return Optional.ofNullable(s) .map(str -> str.replaceAll(".$", "")) .orElse(s); }
6. Conclusión
En este breve artículo, hemos discutido diferentes formas de eliminar solo el último carácter de una cadena : algunos manuales, algunos listos para usar.
Y, si necesitamos más flexibilidad y necesitamos eliminar más caracteres, podemos utilizar la solución más avanzada con expresiones regulares.
Como siempre, el código utilizado a lo largo del artículo se puede encontrar en GitHub.