¿Cómo convierto un Char a Int?

Así que tengo una serie de integers que se parece a "82389235" , pero quería iterar a través de ella para agregar cada número individualmente a MutableList . Sin embargo, cuando lo hago de la manera en que creo que se manejaría:

 var text = "82389235" for (num in text) numbers.add(num.toInt()) 

Esto agrega numbers completamente ajenos a la cadena de la list. Sin embargo, si utilizo println para println a la console, itera perfectamente a través de la cadena.

¿Cómo convierto correctamente un Char a un Int ?

Eso es porque num es un Char , es decir, los valores resultantes son el valor ascii de ese char.

Esto hará el truco:

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

La variable num es de tipo Char . Llamar a toInt() en esto devuelve su código ASCII, y eso es lo que está agregando a la list.

Si desea agregar el valor numérico, puede restar el código ASCII de 0 de cada dígito:

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

Que es un poco mejor como este:

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

Esto también funciona con una operación de map , para que no tenga que crear una MutableList en absoluto:

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

Alternativamente, puede convertir cada carácter individualmente en una String , ya que String.toInt() realmente analiza el número, esto parece un desperdicio en términos de los objects creados:

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

En JVM existe la posibilidad de java.lang.Character.getNumericValue () disponible:

 val numbers: List<Int> = "82389235".map(Character::getNumericValue) 
  • En Kotlin, ¿cómo se modifican los contenidos de una list mientras se itera
  • Kotlin - Lista dentro de un filter de list
  • Android Spinner getDropDownView repite elementos después de la selección
  • ¿Cómo crear una list inmutable en Kotlin que también sea una list inmutable en Java?