Leerzeichen in Go entfernen: Wie man überflüssige Zeichen in einer Zeichenkette loswird

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Ein Problem, das jeder Entwickler kennt

\n\n

Stellen Sie sich vor: Sie schreiben einen Log-Parser, verarbeiten Benutzereingaben aus einem Formular oder bereiten Daten für eine API vor. Zeichenketten kommen mit überflüssigen Leerzeichen am Anfang und Ende. Wenn Sie diese nicht entfernen – Bugs, kaputte Vergleiche, schiefes JSON und verlorene Stunden beim Debuggen. Das ist eine klassische Aufgabe, die auf Stack Overflow tausende Aufrufe gesammelt hat. Heute lösen wir sie in Go – schnell, elegant und ohne Überraschungen.

\n\n

In dieser Anleitung erfahren Sie:

\n
    \n
  • Wie Sie die Standardbibliothek strings zum Kürzen von Leerzeichen verwenden.
  • \n
  • Wie sich TrimSpace von TrimLeft und TrimRight unterscheidet.
  • \n
  • Wie Sie Ihre eigene benutzerdefinierte Funktion für nicht standardmäßige Whitespace-Zeichen schreiben.
  • \n
  • Wie Sie Fallstricke mit Unicode und Tabulatoren vermeiden.
  • \n
\n\n

Los geht's!

\n\n

Schnellstart: strings.TrimSpace

\n\n

Der einfachste und beliebteste Weg, Leerzeichen an beiden Enden einer Zeichenkette zu entfernen, ist die Verwendung der Funktion strings.TrimSpace aus dem Standardpaket strings. Sie entfernt alle Zeichen, die Go als "Leerzeichen" (Whitespace) betrachtet: normale Leerzeichen, Tabulatoren, Zeilenumbrüche, Wagenrückläufe und sogar vertikale Tabulatoren.

\n\n

So sieht das im Code aus:

\n\n
package main\n\nimport (\n    "fmt"\n    "strings"\n)\n\nfunc main() {\n    raw := "   Hallo, Welt!   \\n\\t"\n    cleaned := strings.TrimSpace(raw)\n    \n    fmt.Printf("Original: %q\\n", raw)\n    fmt.Printf("Bereinigt: %q\\n", cleaned)\n}\n
\n\n

Ausgabe:

\n
Original: "   Hallo, Welt!   \\n\\t"\nBereinigt: "Hallo, Welt!"\n
\n\n

Beachten Sie: %q in fmt.Printf zeigt die Zeichenkette mit Escape-Sequenzen – das ist praktisch zum Debuggen, um versteckte Zeichen zu sehen.

\n\n

Wann verwenden: In 90% der Fälle reicht das aus. Wenn Sie eine Zeichenkette einfach von überflüssigen Zeichen an den Rändern "bereinigen" müssen – nehmen Sie TrimSpace.

\n\n

Feinabstimmung: TrimLeft und TrimRight

\n\n

Manchmal müssen Sie Leerzeichen nur links oder nur rechts entfernen. Dafür gibt es in Go strings.TrimLeft und strings.TrimRight. Aber es gibt einen Haken: Sie arbeiten standardmäßig nicht mit "Leerzeichen", sondern mit einem übergebenen Zeichensatz.

\n\n

Beispiel:

\n\n
package main\n\nimport (\n    "fmt"\n    "strings"\n)\n\nfunc main() {\n    s := "   \\t\\n   Hallo   "\n    \n    // Nur links kürzen (Leerzeichen, Tabulatoren, Zeilenumbrüche)\n    left := strings.TrimLeft(s, " \\t\\n")\n    fmt.Printf("Links: %q\\n", left)\n    \n    // Nur rechts kürzen (nur Leerzeichen)\n    right := strings.TrimRight(s, " ")\n    fmt.Printf("Rechts: %q\\n", right)\n}\n
\n\n

Ausgabe:

\n
Links: "Hallo   "\nRechts: "   \\t\\n   Hallo"\n
\n\n

Wichtig: TrimLeft und TrimRight entfernen alle Zeichen aus dem zweiten Argument, bis sie auf ein Zeichen stoßen, das nicht darin enthalten ist. Wenn Sie nur das Leerzeichen " " angeben, bleibt der Tabulator \\t unberührt.

\n\n

Analog zu TrimSpace für eine Seite

\n\n

Wenn Sie alle Whitespace-Zeichen nur links oder nur rechts entfernen müssen, aber keine Lust haben, alle Zeichen aufzulisten, können Sie einen kleinen Wrapper schreiben:

\n\n
func trimLeftSpace(s string) string {\n    return strings.TrimLeft(s, " \\t\\n\\r\\v\\f")\n}\n\nfunc trimRightSpace(s string) string {\n    return strings.TrimRight(s, " \\t\\n\\r\\v\\f")\n}\n
\n\n

Oder, für diejenigen, die Kürze lieben, strings.TrimSpace mit einem Trick verwenden:

\n\n
// Nur links kürzen: zuerst umkehren, dann TrimSpace, dann wieder umkehren\nfunc trimLeftSpace(s string) string {\n    runes := []rune(s)\n    for i, r := range runes {\n        if !unicode.IsSpace(r) {\n            return string(runes[i:])\n        }\n    }\n                

Blogs

Buchempfehlungen