HOWTO · Java

trim() vs. strip() in Java

Dieses Tutorial demonstriert die Unterschiede zwischen den Methoden trim() und strip() in Java.

Auf dieser Seite

In Java entfernen String.trim() und String.strip() jeweils passende Zeichen am Anfang und Ende einer Zeichenfolge; Zeichen in der Mitte bleiben unverändert. Der Unterschied liegt in der Regel, nach der bestimmt wird, welche Zeichen passen. Verwenden Sie trim() nach seiner älteren Regel oder strip(), wenn Java 11 oder neuer verfügbar ist und die Regel Character.isWhitespace(int) zu Ihrer Eingabe passt.

trim() und strip() im Überblick

Merkmal trim() strip()
Verfügbar seit Java 1.0 Java 11
Zeichenregel Entfernt führende und nachgestellte Zeichen mit Codepoints kleiner oder gleich U+0020 Entfernt führende und nachgestellte Zeichen, für die Character.isWhitespace(int) den Wert true zurückgibt
Deklariert in String String
Zeichen im Inneren Unverändert Unverändert

Beide Methoden geben eine Zeichenfolge zurück, bei der die passenden Zeichen an den Enden entfernt wurden. Beispielsweise entfernen beide gewöhnliche Leerzeichen am Anfang und Ende; Leerzeichen zwischen Wörtern bleiben dagegen erhalten. Der entscheidende Unterschied besteht nicht darin, dass eine Methode jedes Unicode-Leerzeichen behandelt: Jede folgt einer eigenen Zeichenregel.

Wie trim() und strip() Leerraum behandeln

trim() entfernt jedes führende oder nachgestellte Zeichen, dessen numerischer Codepoint nicht größer als U+0020 ist. Dazu gehören das gewöhnliche Leerzeichen U+0020, Tabulatoren und Wagenrückläufe. Die Methode verwendet keine allgemeine Unicode-Klassifizierung für Leerraum. Ein Zeichen oberhalb dieses Bereichs, etwa U+2005, bleibt nach trim() am Rand erhalten.

strip() prüft Zeichen mit Character.isWhitespace(int). Damit werden viele Leerraumzeichen jenseits von U+0020 erfasst, darunter U+2005 und U+2001; jedoch nicht jedes Unicode-Leerzeichen. Insbesondere entfernt strip() nach dieser Regel das geschützte Leerzeichen U+00A0 nicht. Betrachten Sie strip() daher nicht als allgemeine Bereinigung für sämtliche Unicode-Leerzeichen.

In beiden Fällen werden nur passende Zeichen an den beiden Enden entfernt. Ein Tabulator oder Leerzeichen zwischen Nicht-Leerraumzeichen bleibt in der Zeichenfolge erhalten.

Java-Version und API-Details

trim() ist seit Java 1.0 in String verfügbar. strip() wurde in Java 11 zu String hinzugefügt; Code, der diese Methode verwendet, benötigt daher eine Java-11-API oder neuer. strip() ist eine Methode von String und wird nicht vom Interface CharSequence deklariert. Die Java-API für String dokumentiert beide Methoden. Die Java-API für Character.isWhitespace(int) definiert die Zeichenprüfung, die strip() verwendet. Muss eine Anwendung gegen eine ältere Java-API kompiliert werden, verwenden Sie trim() oder implementieren Sie genau die Zeichenregel, die Ihre Anwendung benötigt.

Die Methoden anhand eines Java-Beispiels vergleichen

Führen Sie dieses Beispiel mit Java 11 oder neuer aus. Es vergleicht die Ergebnisse für gewöhnliche Leerzeichen, einen Tabulator und einen Wagenrücklauf, U+2005, U+2001 sowie das geschützte Leerzeichen U+00A0. Im Quelltext werden Unicode-Escapes verwendet, damit die geprüften Codepoints eindeutig sind.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

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

Die Ausgabe vergleicht jede Zeichenfolge nach Anwendung von trim() und strip(), und zwar in derselben Reihenfolge wie die Beispiele oben. Die ersten beiden Ergebnisse sind true, weil beide Methoden gewöhnliche Leerzeichen, Tabulatoren und Wagenrückläufe an den Enden entfernen. Die nächsten beiden Ergebnisse sind false: strip() entfernt U+2005 und U+2001 nach der Regel von Character.isWhitespace(int), während trim() sie beibehält. Das letzte Ergebnis ist true, weil keine der beiden Methoden das geschützte Leerzeichen U+00A0 entfernt. Das Beispiel mit U+2001 enthält ausschließlich dieses Zeichen. Deshalb lässt trim() eine nichtleere Zeichenfolge zurück, während strip() eine leere Zeichenfolge zurückgibt.

Die passende Methode auswählen

Wählen Sie strip(), wenn Java 11 oder neuer verfügbar ist und das Verhalten von Character.isWhitespace(int) den Zeichen entspricht, die Ihre Anwendung entfernen soll. Wählen Sie trim(), wenn Sie dessen engere Regel für Zeichen bis einschließlich U+0020 benötigen oder ältere Java-Versionen unterstützen müssen. Soll Ihre Eingaberegel Zeichen wie das geschützte Leerzeichen einschließen, legen Sie diese Regel ausdrücklich fest und wenden Sie sie gezielt an. Gehen Sie bei keiner der beiden Methoden davon aus, dass sie alle Unicode-Leerzeichen abdeckt.