Also, wegen fehlender Methoden Long.valueOf(String s)stecke ich fest.
Wie konvertiere ich String in Long in Kotlin?
Also, wegen fehlender Methoden Long.valueOf(String s)stecke ich fest.
Wie konvertiere ich String in Long in Kotlin?
Antworten:
1. string.toLong()
Analysiert die Zeichenfolge als [lange] Zahl und gibt das Ergebnis zurück.
@throws NumberFormatException, wenn die Zeichenfolge keine gültige Darstellung einer Zahl ist.
2. string.toLongOrNull()
Analysiert die Zeichenfolge als [lange] Zahl und gibt das Ergebnis zurück oder
nullwenn die Zeichenfolge keine gültige Darstellung einer Zahl ist.
3. str.toLong(10)
Analysiert die Zeichenfolge als [lange] Zahl und gibt das Ergebnis zurück.
@throws NumberFormatException, wenn die Zeichenfolge keine gültige Darstellung einer Zahl ist.
@throws IllegalArgumentException, wenn [radix] kein gültiger Radix für die Konvertierung von Zeichenfolgen in Zahlen ist.
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))
4. string.toLongOrNull(10)
Analysiert die Zeichenfolge als [lange] Zahl und gibt das Ergebnis zurück oder
nullwenn die Zeichenfolge keine gültige Darstellung einer Zahl ist.@throws IllegalArgumentException, wenn [radix] kein gültiger Radix für die Konvertierung von Zeichenfolgen in Zahlen ist.
public fun String.toLongOrNull(radix: Int): Long? {...}
5. java.lang.Long.valueOf(string)
public static Long valueOf(String s) throws NumberFormatException
String hat eine entsprechende Erweiterungsmethode:
"10".toLong()
Stringeine Erweiterungsfunktion haben toLong()sowie toInt()und andere. Sie können diese verwenden. Vielleicht kann @ilya diese Antwort auf den aktuellen Kotlin aktualisieren ( jet.StringReferenz entfernen .)
Für Strings stehen Erweiterungsmethoden zur Verfügung , um sie in andere primitive Typen zu analysieren. Beispiele unten:
str.toLongOrNull()und andere ähnlich benannte Methoden sind ebenfalls nützlich, wenn Sie nicht garantieren können, dass die Eingabe korrekt formatiert wird. Damit können Sie str.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
Hinweis: Die erwähnten Antworten jet.Stringsind veraltet. Hier ist der aktuelle Kotlin (1.0):
Jeder Stringin Kotlin hat bereits eine Erweiterungsfunktion, die Sie aufrufen können toLong(). Es wird nichts Besonderes benötigt, verwenden Sie es einfach.
Alle Erweiterungsfunktionen fürString sind dokumentiert. Weitere für die Standardbibliothek finden Sie in der API-Referenz
Es ist interessant. Code wie folgt:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
macht diese Ausgabe:
2
true
Ich denke, Kotlin konvertiert in diesem Fall von java.lang.Longund lange primitiv zu kotlin.Longautomatisch. Es ist also eine Lösung, aber ich würde mich freuen, ein Tool ohne die Verwendung des Pakets java.lang zu sehen.
Tatsächlich ist in 90% der Fälle, in denen Sie auch überprüfen müssen, ob das "Long" gültig ist, Folgendes erforderlich:
"10".toLongOrNull()
Es gibt ein 'orNull'-Äquivalent für jeden' toLong 'der Grundtypen, und diese ermöglichen die Verwaltung ungültiger Fälle unter Einhaltung des Kotlin? Idiom.
string.toLong ()
Wo stringist deine Variable?
Eine gute alte Java-Möglichkeit, die in den Antworten nicht erwähnt wird, ist java.lang.Long.decode(String).
Dezimalzeichenfolgen:
Kotlins String.toLong()entspricht Java Long.parseLong(String):
Analysiert das Zeichenfolgenargument als vorzeichenbehaftete Dezimalstelle . ... Der resultierende lange Wert wird zurückgegeben, genau so, als ob das Argument und der Radix 10 als Argumente für die
parseLong(java.lang.String, int)Methode angegeben wurden.
Nicht dezimale Zeichenfolgen:
Kotlins String.toLong(radix: Int)entspricht Javas eLong.parseLong(String, int) :
Analysiert das Zeichenfolgenargument als vorzeichenbehaftetes Long in dem durch das zweite Argument angegebenen Radix. Die Zeichen in der Zeichenfolge müssen alle Ziffern des angegebenen Radix sein ...
Und hier kommt java.lang.Long.decode(String)ins Bild:
Dekodiert einen String in einen Long. Akzeptiert Dezimal-, Hexadezimal- und Oktalzahlen, die durch die folgende Grammatik angegeben werden: DecodableString:
(Vorzeichen) Dezimalzahl | (Zeichen) 0x HexDigits | (Zeichen) 0X HexDigits | (Zeichen) # HexDigits | (Zeichen) 0 OctalDigits
Zeichen: - | +
Das heißt, das decodekann Strings wie analysieren "0x412", wo andere Methoden zu a führen NumberFormatException.
val kotlin_toLong010 = "010".toLong() // 10 as parsed as decimal
val kotlin_toLong10 = "10".toLong() // 10 as parsed as decimal
val java_parseLong010 = java.lang.Long.parseLong("010") // 10 as parsed as decimal
val java_parseLong10 = java.lang.Long.parseLong("10") // 10 as parsed as decimal
val kotlin_toLong010Radix = "010".toLong(8) // 8 as "octal" parsing is forced
val kotlin_toLong10Radix = "10".toLong(8) // 8 as "octal" parsing is forced
val java_parseLong010Radix = java.lang.Long.parseLong("010", 8) // 8 as "octal" parsing is forced
val java_parseLong10Radix = java.lang.Long.parseLong("10", 8) // 8 as "octal" parsing is forced
val java_decode010 = java.lang.Long.decode("010") // 8 as 0 means "octal"
val java_decode10 = java.lang.Long.decode("10") // 10 as parsed as decimal
Das Konvertieren eines Stringin Long(das eine 64-Bit-Ganzzahl mit Vorzeichen darstellt) in Kotlin 1.3 ist recht einfach .
Sie können eine der folgenden drei Methoden verwenden:
val number1: Long = "789".toLong()
println(number1) // 789
val number2: Long? = "404".toLongOrNull()
println("number = $number2") // number = 404
val number3: Long? = "Error404".toLongOrNull()
println("number = $number3") // number = null
val number4: Long? = "111".toLongOrNull(2)
println("numberWithRadix(2) = $number4") // numberWithRadix(2) = 7
Wenn Sie NumberFormatExceptionbeim Parsen nicht damit umgehen möchten
var someLongValue=string.toLongOrNull() ?: 0
Eigentlich gibt es mehrere Möglichkeiten:
Gegeben:
var numberString : String = "numberString"
// number is the Long value of numberString (if any)
var defaultValue : Long = defaultValue
Dann haben wir:
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ? | true | false |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong() | number | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() | number | null |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue | number | defaultValue |
+—————————————————————————————————————————————+——————————+———————————————————————+