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.
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
String
a une méthode d'extension correspondante:
"10".toLong()
Des méthodes d'extension sont disponibles pour String
s afin de les analyser dans d'autres types primitifs. Exemples ci-dessous:
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
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.
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.
string.toLong ()
où string
est votre variable.
Si vous ne voulez pas gérer NumberFormatException
lors de l'analyse
var someLongValue=string.toLongOrNull() ?: 0
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
Il existe 5 façons de convertir String en Long en langage de programmation Kotlin, comme suit:
Reportez-vous à docs pour une explication détaillée.
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
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 |
+—————————————————————————————————————————————+——————————+———————————————————————+