HOWTO · Java

Comparación de `trim()` y `strip()` en Java

Este tutorial demuestra las diferencias entre los métodos trim() y strip() en Java.

En esta página

En Java, String.trim() y String.strip() eliminan los caracteres que cumplen sus respectivas reglas al principio y al final de una cadena; ninguno modifica los caracteres interiores. La diferencia está en cómo determina cada método qué caracteres cumplen la regla. Usa trim() para aplicar su regla heredada, o strip() si trabajas con Java 11 o posterior y la regla de Character.isWhitespace(int) se ajusta a tus datos.

trim() y strip() de Java, en resumen

Detalle trim() strip()
Disponible desde Java 1.0 Java 11
Regla de caracteres Elimina los caracteres iniciales y finales cuyo punto de código es igual o inferior a U+0020 Elimina los caracteres iniciales y finales para los que Character.isWhitespace(int) devuelve true
Declarado en String String
Caracteres interiores Sin cambios Sin cambios

Ambos métodos devuelven una cadena sin los caracteres que cumplen la regla en sus extremos. Por ejemplo, los dos eliminan los espacios normales del principio y del final, pero conservan los espacios entre palabras. La diferencia clave no es que uno gestione todos los espacios Unicode: cada método aplica una regla de caracteres específica.

Cómo gestionan los espacios en blanco trim() y strip()

trim() elimina cada carácter inicial o final cuyo punto de código numérico no supera U+0020. Esto incluye el espacio normal U+0020, las tabulaciones y los retornos de carro. No utiliza la clasificación general de espacios en blanco de Unicode. Si un carácter supera ese rango, como U+2005, permanece en el extremo después de aplicar trim().

strip() comprueba los caracteres con Character.isWhitespace(int). Esto incluye muchos caracteres de espacio en blanco que superan U+0020, como U+2005 y U+2001, pero no todos los separadores de espacio de Unicode. En particular, según esta regla, strip() no elimina el espacio de no separación U+00A0. Por tanto, no consideres strip() una operación universal para limpiar los espacios en blanco de Unicode.

En ambos casos, solo se eliminan los caracteres que cumplen la regla en los dos extremos. Una tabulación o un espacio entre caracteres que no son espacios en blanco permanece en la cadena.

Versiones de Java y detalles de la API

trim() está disponible en String desde Java 1.0. strip() se añadió a String en Java 11, así que el código que lo utilice necesita una API de Java 11 o posterior. strip() es un método de String; no está declarado por la interfaz CharSequence. La API de String de Java documenta ambos métodos, y la API de Character.isWhitespace(int) de Java define la comprobación de caracteres que utiliza strip(). Si una aplicación debe compilarse contra una API de Java más antigua, usa trim() o implementa la política exacta de caracteres que necesite.

Compara los métodos con un ejemplo de Java

Ejecuta este ejemplo con Java 11 o posterior. Compara los resultados para espacios normales, una tabulación y un retorno de carro, U+2005, U+2001 y el espacio de no separación U+00A0. El código fuente utiliza escapes Unicode para que los puntos de código probados no den lugar a ambigüedades.

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

public class TrimVsStrip {
    public static void main(String[] args) {
        String[] samples = {
            " www.delftstack.com ",
            "\t www.delftstack.com \r",
            "www.delftstack.com \u2005",
            "\u2001",
            "\u00A0"
        };

        for (String sample : samples) {
            System.out.println(sample.trim().equals(sample.strip()));
        }
    }
}
true
true
false
false
true

La salida compara cada cadena después de aplicar trim() y strip(), en el mismo orden que las muestras anteriores. Los dos primeros resultados son true porque ambos métodos eliminan los espacios normales, las tabulaciones y los retornos de carro de los extremos. Los dos siguientes son false: strip() elimina U+2005 y U+2001 según Character.isWhitespace(int), mientras que trim() los conserva. El resultado final es true porque ninguno de los métodos elimina el espacio de no separación U+00A0. La muestra U+2001 contiene únicamente ese carácter, por lo que trim() deja una cadena no vacía y strip() devuelve una cadena vacía.

Elige el método adecuado

Elige strip() si tienes Java 11 o posterior y el comportamiento de Character.isWhitespace(int) coincide con los caracteres que debe eliminar tu aplicación. Elige trim() si necesitas su regla más limitada, que abarca los caracteres con puntos de código iguales o inferiores a U+0020, o si necesitas compatibilidad con versiones anteriores de Java. Si tu política de entrada debe incluir caracteres como el espacio de no separación, define y aplica esa política explícitamente; no des por hecho que ninguno de los métodos cubre todos los espacios en blanco de Unicode.