115 votes

Comment convertir String en Int dans Kotlin?

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 le String est un entier valide et le convertir, sinon je dois lever une exception.

Comment puis-je résoudre ça?

131voto

earthw0rmjim Points 11873

Vous pouvez appeler toInt() sur vos String instances:

 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 d'étendue, par exemple:

 for (str in args) {
    str.toIntOrNull()?.let {
        println("The parsed int is $it")
    }
}
 

37voto

nxhoaf Points 541

En fait, il existe 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          |
+---------------------------------------------+----------+-----------------------+
 

20voto

Grzegorz Piwowarek Points 7040
 val i = "42".toIntOrNull()
 

Gardez à l'esprit que le résultat est nul, comme son nom l'indique.

7voto

CoolMind Points 11

Comme suggéré ci-dessus, utilisez toIntOrNull() .

Analyse la chaîne en tant que nombre [Int] et renvoie le résultat ou null si la chaîne n'est pas une représentation valide d'un nombre.

 val a: Int? = "11".toIntOrNull() // 11
val b: Int? = "abc".toIntOrNull() // null
val c: Int? = null?.toIntOrNull() // null
 

2voto

leetwinski Points 10333

j'irais 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 très bonne façon de procéder, sans introduire de valeurs nullables non sécurisées.

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