Réponses:
1. string.toLong()
Analyse la chaîne sous forme de nombre [Long] et renvoie le résultat.
@throws NumberFormatException si la chaîne n'est pas une représentation valide d'un nombre.
2. string.toLongOrNull()
Analyse la chaîne comme un nombre [Long] et renvoie le résultat ou
null
si la chaîne n'est pas une représentation valide d'un nombre.
3. str.toLong(10)
Analyse la chaîne sous forme de nombre [Long] et renvoie le résultat.
@throws NumberFormatException si la chaîne n'est pas une représentation valide d'un nombre.
@throws IllegalArgumentException lorsque [base] n'est pas une base valide pour la conversion de chaîne en nombre.
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))
4. string.toLongOrNull(10)
Analyse la chaîne comme un nombre [Long] et renvoie le résultat ou
null
si la chaîne n'est pas une représentation valide d'un nombre.@throws IllegalArgumentException lorsque [base] n'est pas une base valide pour la conversion de chaîne en nombre.
public fun String.toLongOrNull(radix: Int): Long? {...}
5. java.lang.Long.valueOf(string)
public static Long valueOf(String s) throws NumberFormatException
String
a une méthode d'extension correspondante:
"10".toLong()
String
ont une fonction d'extension toLong()
ainsi que d' toInt()
autres. Vous pouvez les utiliser. Peut-être que @ilya peut mettre à jour cette réponse à Kotlin actuel (supprimer la jet.String
référence.)
Des méthodes d'extension sont disponibles pour String
s pour les analyser en d'autres types primitifs. Exemples ci-dessous:
str.toLongOrNull()
et d'autres méthodes de même nom sont également utiles si vous ne pouvez pas garantir que l'entrée sera formatée correctement. Avec ça, vous pouvez faire des choses commestr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
Remarque: les réponses mentionnées jet.String
sont obsolètes. Voici le Kotlin actuel (1.0):
Tout String
dans Kotlin a déjà une fonction d'extension que vous pouvez appeler toLong()
. Rien de spécial n'est nécessaire, utilisez-le simplement.
Toutes les fonctions d'extension pourString
sont documentées. Vous pouvez en trouver d'autres pour la bibliothèque standard dans la référence de l' API
C'est intéressant. Code comme celui-ci:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
rend cette sortie:
2
true
Je suppose que Kotlin effectue une conversion de java.lang.Long
et longue primitive à kotlin.Long
automatiquement dans ce cas. Donc, c'est une solution, mais je serais heureux de voir l'outil sans l'utilisation du package java.lang.
En fait, 90% du temps, vous devez également vérifier que le `` long '' est valide, vous avez donc besoin de:
"10".toLongOrNull()
Il existe un équivalent «orNull» pour chaque «toLong» des types de base, et ceux-ci permettent de gérer les cas non valides en respectant le Kotlin? idiome.
string.toLong ()
où string
est votre variable.
Une bonne vieille possibilité Java qui n'est pas mentionnée dans les réponses est java.lang.Long.decode(String)
.
Chaînes décimales:
Kotlin String.toLong()
est équivalent à Java Long.parseLong(String)
:
Analyse l'argument de chaîne comme un long décimal signé . ... La valeur longue résultante est renvoyée, exactement comme si l'argument et la base 10 étaient donnés comme arguments à la
parseLong(java.lang.String, int)
méthode.
Chaînes non décimales:
Kotlin's String.toLong(radix: Int)
est équivalent au eLong.parseLong(String, int)
de Java :
Analyse l'argument de chaîne comme un long signé dans la base spécifiée par le deuxième argument. Les caractères de la chaîne doivent tous être des chiffres de la base spécifiée ...
Et voici java.lang.Long.decode(String)
dans l'image:
Décode une chaîne en un long. Accepte les nombres décimaux, hexadécimaux et octaux donnés par la grammaire suivante: DecodableString:
(Signe) DecimalNumeral | (Signe) 0x HexDigits | (Signe) 0X HexDigits | (Signe) # HexDigits | (Signe) 0 OctalDigits
Signe: - | +
Cela signifie qu'il decode
peut analyser des chaînes comme "0x412"
, où d'autres méthodes entraîneront un fichier 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
Convertir un String
en Long
(qui représente un entier signé 64 bits) dans Kotlin 1.3 est assez simple .
Vous pouvez utiliser l'une des trois méthodes suivantes:
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
Si vous ne voulez pas gérer NumberFormatException
lors de l'analyse
var someLongValue=string.toLongOrNull() ?: 0
En fait, il existe plusieurs façons:
Donné:
var numberString : String = "numberString"
// number is the Long value of numberString (if any)
var defaultValue : Long = defaultValue
Ensuite nous avons:
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ? | true | false |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong() | number | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() | number | null |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue | number | defaultValue |
+—————————————————————————————————————————————+——————————+———————————————————————+