Je travaille sur une application console dans Kotlin où j'accepte plusieurs arguments dans la fonction main()
fun main(args: Array<String>) {
// validation & String to Integer conversion
}
Je veux vérifier si la String
est un entier valide et convertir le même ou sinon je dois lever une exception.
Comment puis-je résoudre ça?
Vous pouvez appeler toInt()
sur vos instances String
:
fun main(args: Array<String>) {
for (str in args) {
try {
val parsedInt = str.toInt()
println("The parsed int is $parsedInt")
} catch (nfe: NumberFormatException) {
// not a valid int
}
}
}
Ou toIntOrNull()
comme alternative:
for (str in args) {
val parsedInt = str.toIntOrNull()
if (parsedInt != null) {
println("The parsed int is $parsedInt")
} else {
// not a valid int
}
}
Si vous ne vous souciez pas des valeurs non valides, vous pouvez combiner toIntOrNull()
avec l'opérateur d'appel sécurisé et une fonction de portée, par exemple:
for (str in args) {
str.toIntOrNull()?.let {
println("The parsed int is $it")
}
}
val i = "42".toIntOrNull()
Gardez à l'esprit que le résultat est nul comme le nom l'indique.
je voudrais aller avec quelque chose comme ça.
import Java.util.*
fun String?.asOptionalInt() = Optional.ofNullable(this).map { it.toIntOrNull() }
fun main(args: Array<String>) {
val intArgs = args.map {
it.asOptionalInt().orElseThrow {
IllegalArgumentException("cannot parse to int $it")
}
}
println(intArgs)
}
c'est une bonne façon de faire cela, sans introduire de valeurs nullables non sûres.
En fait, il y a plusieurs façons:
Donné:
var numberString : String = "numberString"
// number is the int value of numberString (if any)
var defaultValue : Int = defaultValue
Ensuite nous avons:
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ? | true | false |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toInt() | number | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toIntOrNull() | number | null |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toIntOrNull() ?: defaultValue | number | defaultValue |
+—————————————————————————————————————————————+——————————+———————————————————————+