226 votes

Comment convertir une chaîne 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?

7voto

Jerome Points 2077

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.

6voto

Gigantic Points 4447

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

4voto

DVarga Points 14186

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

1voto

Nikhil Katekhaye Points 331
string.toLong()

string est votre variable.

1voto

DroidMind Points 1

Si vous ne voulez pas gérer NumberFormatException lors de l'analyse

 var someLongValue = string.toLongOrNull() ?: 0

Prograide.com

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.

Powered by:

X