Donc, en raison du manque de méthodes telles que Long.valueOf(String s)
je suis bloqué.
Comment convertir un String
en Long
en Kotlin?
Donc, en raison du manque de méthodes telles que Long.valueOf(String s)
je suis bloqué.
Comment convertir un String
en Long
en Kotlin?
C'est intéressant. Le code suivant :
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
produit cette sortie :
2
true
Je suppose que Kotlin effectue automatiquement la conversion de java.lang.Long
et du primitif long en kotlin.Long
dans ce cas. Donc, c'est une solution, mais je serais heureux de voir un outil sans utilisation du package java.lang.
En Kotlin, pour convertir une String
en Long
(qui représente un entier signé sur 64 bits), c'est simple.
Vous pouvez utiliser l'un des exemples suivants:
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) // binaire
println("numberWithRadix(2) = $number4") // numberWithRadix(2) = 7
Avec la méthode toLongOrNull()
, vous pouvez utiliser la fonction de portée let { }
après l'opérateur d'appel sécurisé ?.
.
Cette logique est bonne pour exécuter un bloc de code uniquement avec des valeurs non nulles.
fun convertToLong(that: String) {
that.toLongOrNull()?.let {
println("La valeur Long est $it")
}
}
convertToLong("123") // La valeur Long est 123
Une bonne ancienne possiblité Java qui n'est pas mentionnée dans les réponses est java.lang.Long.decode(String)
.
Chaînes décimales :
String.toLong()
de Kotlin est équivalent à Long.parseLong(String)
de Java :
Interprète l'argument de la 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 en argument à la méthode
parseLong(java.lang.String, int)
.
Chaînes non décimales :
String.toLong(radix: Int)
de Kotlin est équivalent à eLong.parseLong(String, int)
de Java :
Interprète l'argument de la 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 où java.lang.Long.decode(String)
entre en jeu :
Décode une chaîne en un Long. Accepte les nombres décimaux, hexadécimaux et octaux donnés par la grammaire suivante : ChaîneDécriptable :
(Signe) NuméralDécimal | (Signe) 0x ChiffresHexadécimaux | (Signe) 0X ChiffresHexadécimaux | (Signe) # ChiffresHexadécimaux | (Signe) 0 ChiffresOctaux
Signe : - | +
Cela signifie que decode
peut interpréter des chaînes comme "0x412"
, où d'autres méthodes provoqueront une NumberFormatException
.
val kotlin_toLong010 = "010".toLong() // 10 interprété comme décimal
val kotlin_toLong10 = "10".toLong() // 10 interprété comme décimal
val java_parseLong010 = java.lang.Long.parseLong("010") // 10 interprété comme décimal
val java_parseLong10 = java.lang.Long.parseLong("10") // 10 interprété comme décimal
val kotlin_toLong010Radix = "010".toLong(8) // 8 en tant que l'interprétation "octale" est forcée
val kotlin_toLong10Radix = "10".toLong(8) // 8 en tant que l'interprétation "octale" est forcée
val java_parseLong010Radix = java.lang.Long.parseLong("010", 8) // 8 en tant que l'interprétation "octale" est forcée
val java_parseLong10Radix = java.lang.Long.parseLong("10", 8) // 8 en tant que l'interprétation "octale" est forcée
val java_decode010 = java.lang.Long.decode("010") // 8 car 0 signifie "octal"
val java_decode10 = java.lang.Long.decode("10") // 10 interprété comme décimal
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.