如何将 Char 转换为 Int?

How do I convert a Char to Int?

所以我有一个 String 的整数,看起来像 "82389235",但我想遍历它以将每个数字单独添加到 MutableList。然而,当我按照我认为的方式处理它时:

var text = "82389235"

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

这会将与字符串完全无关的数字添加到列表中。然而,如果我使用 println 将它输出到控制台,它会完美地遍历字符串。

如何正确地将 Char 转换为 Int

那是因为 num 是一个 Char,即结果值是该字符的 ascii 值。

这样做就可以了:

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

map可以进一步简化:

map(Character::getNumericValue)

变量num的类型是Char。在此 returns 上调用 toInt() 它的 ASCII 代码,这就是您要附加到列表中的内容。

如果要追加数值,只需将每个数字减去0的ASCII码即可:

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

这样比较好看:

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

这也适用于 map 操作,因此您根本不必创建 MutableList

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

或者,您可以将每个字符单独转换为 String,因为 String.toInt() 实际上会解析数字 - 虽然就创建的对象而言这似乎有点浪费:

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

在 JVM 上有高效的 java.lang.Character.getNumericValue() 可用:

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

为清楚起见,zeroAscii 答案可以简化为

val numbers = txt.map { it - '0' }

作为 Char - Char -> Int。如果您想尽量减少键入的字符数,那是我所知道的最短答案。

val numbers = txt.map(Character::getNumericValue)
不过,

可能是最明确的答案,因为它不需要 reader 知道任何关于 low-level ASCII 代码细节的信息。 toString().toInt() 选项需要最少的 ASCII 或 Kotlin 知识,但有点奇怪,并且可能对代码的 readers 最令人费解(尽管这是我用来解决错误的东西在调查是否真的没有更好的方法之前!)

从 Kotlin 1.5 开始,有一个内置函数 Char.digitToInt(): Int:

println('5'.digitToInt()) // 5 (int)

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/digit-to-int.html