String zu Long in Kotlin: 5 fatale Fehler und wie man sie vermeidet

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

String zu Long in Kotlin konvertieren – ohne verrückt zu werden: Die häufigsten Fehler im Überblick

\n\n

Jeder Kotlin-Entwickler steht früher oder später vor der Aufgabe: Eine Benutzereingabe, eine API-Antwort oder eine gelesene Datei soll in eine Zahl vom Typ Long umgewandelt werden. Klingt einfach, oder? Doch genau hier passieren selbst erfahrenen Programmierern Fehler, die zu App-Abstürzen, leeren Bildschirmen und stundenlangem Debugging führen.

\n\n

In diesem Artikel analysieren wir die fünf häufigsten Fehler bei der Konvertierung von String zu Long in Kotlin. Sie lernen nicht nur, wie Sie diese beheben, sondern auch, wie Sie Code schreiben, der bei ungültigen Eingaben nicht sofort abstürzt. Los geht's!

\n\n

Fehler Nr. 1: Naive Verwendung von toLong() ohne Fehlerbehandlung

\n\n

Der direkteste Weg ist der Aufruf der Methode toLong() auf einen String. Ja, das funktioniert – aber nur, wenn der String eine gültige Zahl enthält. Andernfalls: Hallo NumberFormatException!

\n\n
val userInput = "123abc"\nval number: Long = userInput.toLong() // Löst eine NumberFormatException aus!
\n\n

Warum ist das schlecht? Eine Laufzeitausnahme ist immer ein Risiko. Wenn Ihre App diese nicht abfängt, sieht der Benutzer einen Absturz.

\n\n

Wie beheben? Verwenden Sie try-catch oder, noch besser, die sichere Alternative toLongOrNull().

\n\n
val userInput = "123abc"\nval number: Long? = userInput.toLongOrNull() // Gibt null zurück, keine Ausnahme\nprintln(number) // null
\n\n

Die Methode toLongOrNull() ist Ihr Retter. Kann der String nicht konvertiert werden, gibt sie einfach null zurück, und Sie können diesen Fall problemlos behandeln.

\n\n

Fehler Nr. 2: Ignorieren von null und leeren Strings

\n\n

In Kotlin werden Typen explizit in nullable und non-null unterteilt. Wenn Sie versuchen, toLong() auf einen String aufzurufen, der null sein könnte, lässt der Compiler Sie nicht durch. Aber es gibt eine Falle: Ein leerer String ("") ist nicht null und löst ebenfalls eine Ausnahme aus.

\n\n
val nullableString: String? = null\n// nullableString.toLong() // Compilerfehler: nur safe (?.) oder non-null asserted (!!.) Aufrufe erlaubt\n\nval emptyString = ""\nemptyString.toLongOrNull() // null, alles gut
\n\n

Praxistipp: Prüfen Sie den String immer auf Leerheit oder verwenden Sie toLongOrNull() in Kombination mit dem Elvis-Operator ?:.

\n\n
fun parseUserAge(input: String?): Long {\n    return input?.toLongOrNull() ?: 0L // Bei null oder keiner Zahl: 0 zurückgeben\n}
\n\n

Dieser Ansatz macht den Code idiomatisch und sicher.

\n\n

Fehler Nr. 3: Leerzeichen und unsichtbare Zeichen vergessen

\n\n

Benutzer sind unberechenbar. Sie können versehentlich ein Leerzeichen vor oder nach der Zahl setzen. Eine aus einer Datei gelesene Zeichenkette kann Zeilenumbrüche (\\n) enthalten. Die Methode toLongOrNull() kürzt den String nicht – sie erwartet, dass der String nur aus Ziffern (und ggf. einem Minuszeichen) besteht.

\n\n
val dirtyString = "  42  "\ndirtyString.toLongOrNull() // null, wegen der Leerzeichen
\n\n

Lösung: Rufen Sie vor der Konvertierung immer trim() auf.

\n\n
val cleanString = dirtyString.trim()\nval number: Long? = cleanString.toLongOrNull()\nprintln(number) // 42
\n\n

Dies ist eine der einfachsten und effektivsten Methoden, um Fehler zu vermeiden. Merken Sie sich die Regel: Trim before you convert.

\n\n

Fehler Nr. 4: Probleme mit Lokalisierung und Tausendertrennzeichen

\n\n

In verschiedenen Ländern werden Zahlen unterschiedlich geschrieben. In den USA und Russland werden Tausendertrennzeichen wie Kommas (1,234) oder Punkte verwendet, in Europa oft Punkte oder Leerzeichen. Kotlin erwartet standardmäßig eine „saubere" Zahl ohne solche Trennzeichen.

\n\n
val europeanNumber = "1.234"\neuropeanNumber.toLongOrNull() // null, weil der Punkt als Dezimaltrenner interpretiert wird
\n\n

Lösung: Entfernen Sie alle nicht-numerischen Zeichen (außer dem Minuszeichen) vor der Konvertierung oder verwenden Sie eine Bibliothek wie java.text.NumberFormat für die lokalisierte Verarbeitung.

\n\n
val cleanNumber = europeanNumber.replace(".", "").replace(",", "")\nval number: Long? = cleanNumber.toLongOrNull()\nprintln(number) // 1234
\n\n

Denken Sie daran: Die Lokalisierung Ihrer Zielgruppe ist entscheidend für eine korrekte Konvertierung.

\n\n

Fehler Nr. 5: Übermäßiges Vertrauen in Standardbibliotheken ohne Randfallprüfung

\n\n

Selbst wenn Sie toLongOrNull() und trim() verwenden, gibt es Randfälle: sehr große Zahlen, die den Long-Bereich überschreiten (Long.MAX_VALUE ist 9.223.372.036.854.775.807), oder Strings mit wissenschaftlicher Notation wie "1e10". Diese werden von toLongOrNull() nicht korrekt verarbeitet.

\n\n
val tooLarge = "99999999999999999999"\ntooLarge.toLongOrNull() // null, da außerhalb des Long-Bereichs\n\nval scientific = "1e10"\nscientific.toLongOrNull() // null, wissenschaftliche Notation wird nicht unterstützt
\n\n

Lösung: Für solche Fälle sollten Sie toBigIntegerOrNull() oder eine benutzerdefinierte Validierung in Betracht ziehen. Testen Sie Ihre Konvertierungslogik immer mit Randfällen.

\n\n
fun safeParseToLong(input: String): Long? {\n    return input.trim().toLongOrNull() // Einfach, aber nicht für alle Fälle geeignet\n}
\n\n

Ein umfassender Ansatz könnte eine Regex-Validierung oder die Verwendung von BigDecimal für präzise Berechnungen umfassen.

\n\n

Fazit: Sicher und robust String zu Long in Kotlin konvertieren

\n\n

Die Konvertierung von String zu Long in Kotlin ist eine häufige Aufgabe, die bei falscher Handhabung schnell zu Fehlern führt. Mit den richtigen Techniken – insbesondere toLongOrNull(), trim() und der Berücksichtigung von Lokalisierung und Randfällen – können Sie Ihren Code jedoch robust und benutzerfreundlich gestalten.

\n\n

Denken Sie daran: Gute Fehlerbehandlung ist kein Luxus, sondern eine Notwendigkeit für professionelle Softwareentwicklung. Vermeiden Sie die fünf genannten Fehler, und Ihre Kotlin-App wird stabiler und zuverlässiger.

Blogs

Buchempfehlungen