web-dev-qa-db-fra.com

Comment convertir String en Long et Kotlin?

Le Kotlin Challenge a commencé.

Toutes les tâches consistent à écrire un programme de console qui lit les paramètres à partir de la console et écrit la sortie sur la console pour permettre la vérification automatique.

la méthode principale à Kotlin ressemble à

fun main(args: Array<String>): Unit {
    //do something
}

La plupart des paramètres d'entrée dans les tâches doivent être interprétés comme des nombres ..__ Donc, en raison du manque de méthodes comme Long.valueOf(String s), je suis resté bloqué. Je ne peux pas convertir String en Long et j'ai honte.

107
Jerome

1. string.toLong()

Analyse la chaîne en tant que nombre [long] et renvoie le résultat.

@throws NumberFormatException si la chaîne n'est pas valide représentation d'un nombre.

2. string.toLongOrNull()

Analyse la chaîne en tant que 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 en tant que nombre [long] et renvoie le résultat.

@throws NumberFormatException si la chaîne n'est pas valide représentation d'un nombre. 

@throws IllegalArgumentException quand [radix] 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 en tant que 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 [radix] n'est pas un radix valide pour la chaîne conversion de nombre.

public fun String.toLongOrNull(radix: Int): Long? {...}

5. Java.lang.Long.valueOf(string)

public static Long valueOf(String s) throws NumberFormatException
89
Misagh

String a une méthode d'extension correspondante:

"10".toLong()
90
Ilya Klyuchnikov

Des méthodes d'extension sont disponibles pour Strings afin de les analyser dans d'autres types primitifs. Exemples ci-dessous:

54
Eric

Remarque: les réponses mentionnant jet.String sont obsolètes. Voici Kotlin actuel (1.0):

Toute 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.

Toutes les fonctions d'extension pour String sont documentées. Vous pouvez en trouver d’autres pour la bibliothèque standard dans la référence de l’API

8
Jayson Minard

C'est intéressant. Code comme ceci:

val num = Java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);

rend cette sortie:

2
true

Je suppose que dans ce cas, Kotlin convertit automatiquement les Java.lang.Long et primitives longues en kotlin.Long Donc, c'est une solution, mais je serais heureux de voir l'outil sans l'utilisation du package Java.lang. 

6
Jerome

En fait, vous devez également vérifier que le «long» est valide dans 90% des cas. Il vous faut donc:

"10".toLongOrNull()

Il existe un équivalent "orNull" pour chaque type "toLong" des types de base, et ceux-ci permettent de gérer les cas non valides tout en conservant le Kotlin? idiome.

6
innov8

string.toLong ()

string est votre variable.

1
Nikhil Katekhaye

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

 var someLongValue=string.toLongOrNull() ?: 0
1
nvinayshetty

Convertir une String en Long (qui représente un entier signé de 64 bits) dans Kotlin 1.3 est très 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
0
ARGeo

Il existe 5 façons de convertir String en Long en langage de programmation Kotlin, comme suit:

  1. string.toLong ()
  2. string.toLongOrNull ()
  3. string.toLong (10)
  4. string.toLongOrNull (10)
  5. Java.lang.Long.valueOf (chaîne)

Reportez-vous à docs pour une explication détaillée.

0
hetsgandhi

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:

La fonction String.toLong() de Kotlin est équivalente à la fonction Long.parseLong(String) : de Java

Analyse l'argument de chaîne sous la forme d'un signé décimal long. ... Le la valeur longue résultante est renvoyée, exactement comme si l'argument et le la base 10 a été donnée comme argument de la méthode parseLong(Java.lang.String, int).


Chaînes non décimales:

La fonction String.toLong(radix: Int) de Kotlin est équivalente à la fonction eLong.parseLong(String, int) : de Java

Analyse l'argument de chaîne en tant que signe long 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 radix spécifiée ...

Et voici Java.lang.Long.decode(String) dans l'image:

Décode une chaîne en un long. Accepte les valeurs décimales, hexadécimales et octales nombres donnés par la grammaire suivante: DecodableString:

(Signe) DecimalNumeral | (Signer) 0x HexDigits | (Signe) 0X HexDigits | (Signer) # HexDigits | (Signe) 0 OctalDigits

Signe: - | +

Cela signifie que decode peut analyser des chaînes telles que "0x412", où d'autres méthodes aboutiront à 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
0
DVarga

En fait, il y a 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          |
+—————————————————————————————————————————————+——————————+———————————————————————+
0
nxhoaf