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
?
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)
Sur JVM, il est efficace Java.lang.Character.getNumericValue () disponible:
val numbers: List<Int> = "82389235".map(Character::getNumericValue)
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())