web-dev-qa-db-fra.com

Comment convertir un Char en Int?

J'ai donc un String d'entiers qui ressemble à "82389235", mais je voulais le parcourir pour ajouter chaque numéro individuellement à un MutableList. Cependant, quand j'y vais comme je pense, cela serait géré:

var text = "82389235"

for (num in text) numbers.add(num.toInt())

Cela ajoute à la liste des nombres complètement indépendants de la chaîne. Pourtant, si j'utilise println pour le restituer à la console, il parcourt parfaitement la chaîne.

Comment convertir correctement un Char en Int?

13
ibroadsword

C'est parce que num est un Char, c'est-à-dire que les valeurs résultantes sont la valeur ascii de ce caractère.

Ça fera l'affaire:

val txt = "82389235"
val numbers = txt.map { it.toString().toInt() }

map pourrait être simplifié davantage:

map(Character::getNumericValue)
22
s1m0nw1

Sur JVM, il est efficace Java.lang.Character.getNumericValue () disponible:

val numbers: List<Int> = "82389235".map(Character::getNumericValue)
6
Vadzim

La variable num est de type Char. L'appel de toInt() à ce sujet renvoie son code ASCII, et c'est ce que vous ajoutez à la liste.

Si vous souhaitez ajouter la valeur numérique, vous pouvez simplement soustraire le code ASCII de 0 de chaque chiffre:

numbers.add(num.toInt() - '0'.toInt())

Ce qui est un peu plus agréable comme ça:

val zeroAscii = '0'.toInt()
for(num in text) {
    numbers.add(num.toInt() - zeroAscii)
}

Cela fonctionne également avec une opération map, de sorte que vous n'avez pas du tout besoin de créer un MutableList:

val zeroAscii = '0'.toInt()
val numbers = text.map { it.toInt() - zeroAscii }

Alternativement, vous pouvez convertir chaque caractère individuellement en String, puisque String.toInt() analyse en fait le nombre - cela semble un peu inutile en termes d'objets créés cependant:

numbers.add(num.toString().toInt())
4
zsmb13