String-Formatierung in Kotlin: 5 Ansätze für Profis

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

Die Magie der Strings: Warum Formatierung in Kotlin eine Kunst ist

\n\n

Stellen Sie sich vor: Sie schreiben eine App zur Verfolgung von Sporttrainings. Sie müssen eine Nachricht ausgeben: "Hallo, Alexei! Ihre Zeit: 42,5 km in 2:15:07. Das beste Ergebnis ist 3,2% besser.". Wenn Sie einen solchen String durch Konkatenation (Verkettung) im Java-Stil zusammenbauen, wird der Code zu einem Chaos aus Pluszeichen und Anführungszeichen. String-Formatierung in Kotlin löst dieses Problem elegant und leistungsstark.

\n\n

In diesem Artikel betrachten wir 5 Ansätze zur Kotlin String-Formatierung. Sie erfahren, wann Sie Interpolation, wann den guten alten String.format() und wann fortgeschrittene Vorlagen verwenden sollten. Los geht's!

\n\n

1. String-Interpolation: Das tägliche Brot von Kotlin

\n\n

Die beliebteste und einfachste Technik ist die String-Interpolation in Kotlin. Sie ist direkt in die Sprache integriert: Verwenden Sie das Dollarzeichen $ zum Einfügen einer Variable und ${} für Ausdrücke.

\n\n
val name = "Anna"\nval age = 28\nval message = "Ich heiße $name und bin $age Jahre alt."\nprintln(message) // Ich heiße Anna und bin 28 Jahre alt.\n\n// Ausdrücke mit geschweiften Klammern\nval price = 49.99\nval discount = 0.2\nval finalPrice = "Preis mit Rabatt: ${price * (1 - discount)} Rubel."\nprintln(finalPrice) // Preis mit Rabatt: 39.992 Rubel.
\n\n

Vorteile: Lesbarkeit, Geschwindigkeit, keine zusätzlichen Aufrufe. Nachteile: Keine Kontrolle über das Zahlenformat (z. B. Anzahl der Nachkommastellen).

\n\n

Wann verwenden

\n
    \n
  • Einfache Nachrichten, Logs, UI-Texte
  • \n
  • Wenn keine genaue Formatierung von Zahlen oder Daten erforderlich ist
  • \n
  • Innerhalb von println() oder StringBuilder
  • \n
\n\n

2. String.format(): Das Java-Erbe in Kotlin

\n\n

Wenn Sie die Kontrolle über das Format benötigen, hilft String.format() in Kotlin. Es ist eine direkte Brücke zur Java-Methode String.format() mit denselben Formatspezifizierern (%s, %d, %.2f).

\n\n
val pi = 3.1415926535\nval formatted = String.format("Zahl π mit drei Stellen: %.3f", pi)\nprintln(formatted) // Zahl π mit drei Stellen: 3.142\n\n// Mehrere Argumente\nval name = "Ivan"\nval score = 95\nval result = String.format("%s hat %d von 100 Punkten erreicht", name, score)\nprintln(result) // Ivan hat 95 von 100 Punkten erreicht
\n\n

Ein wichtiger Punkt: Die Kotlin String.format-Formatierung ist nicht typsicher – wenn Sie den falschen Typ übergeben, erhalten Sie eine Laufzeitausnahme. Für eine statische Prüfung verwenden Sie Kotlin-spezifische Methoden (siehe Abschnitt 5).

\n\n

3. MessageFormat: Wenn Vorlagen mit Platzhaltern benötigt werden

\n\n

Für komplexe Vorlagen mit sich wiederholenden Argumenten oder Lokalisierung – MessageFormat in Kotlin. Es kann Wortformen (Singular/Plural) auswählen und Daten formatieren.

\n\n
import java.text.MessageFormat\n\nval pattern = "{0} hat {1} {0,choice,0#Äpfel|1#Apfel|2#Äpfel}."\nval result = MessageFormat.format(pattern, "Petja", 5)\nprintln(result) // Petja hat 5 Äpfel.\n\n// Mit Datum\nval datePattern = "Heute ist {0,date,long}. Uhrzeit: {0,time,short}"\nval now = java.util.Date()\nprintln(MessageFormat.format(datePattern, now))
\n\n

Wann wählen: Internationalisierung (i18n), komplexe Deklinationen, Vorlagen mit 5+ Argumenten. Nachteil: Umständliche Syntax und Abhängigkeit von java.text.

\n\n

4. Kotlin-Erweiterungen: Prägnanz und Typsicherheit

\n\n

Die Kotlin-Community liebt Erweiterungen zur String-Formatierung. Sie können Ihr eigenes Rad erfinden oder fertige Bibliotheken verwenden (z. B. kotlinx.string).

\n\n
// Einfachste Erweiterung\nfun String.format(vararg args: Any?): String {\n    return String.format(this, *args)\n}\n\n// Verwendung\nval template = "Hallo, %s! Dein Kontostand: %.2f USD"\nval msg = template.format("Maxim", 1234.5678)\nprintln(msg) // H                

Blogs

Buchempfehlungen