如何将字符转换为整数?

40

我有一个看起来像"82389235"的整数字符串,我想遍历它并将每个数字逐个添加到一个MutableList中。然而,当我以我认为正确的方式处理时:

var text = "82389235"

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

这将完全不相关的数字添加到列表中。然而,如果我使用println将其输出到控制台,它会完美地迭代字符串。

如何正确将Char转换为Int

5个回答

52

这是因为num是一个Char类型,也就是所得到的值是该字符的ascii码。

这将解决问题:

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

map可以进一步简化:

map(Character::getNumericValue)

14

10
变量num的类型为Char。调用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())

'0'.toInt() 正确返回 48,如答案所解释的那样,这是字符 '0' 的 ASCII 码。如果您想获取包含数字的字符的数值,您需要从其中减去字符 '0' 的 ASCII 值。 - zsmb13

9

1
你似乎在那个问题中链接到了错误的答案,如果你不介意的话,我已经更改了它。 - Salem

1
为了清晰起见,zeroAscii的答案可以简化为
val numbers = txt.map { it - '0' }

如果你想要最小化输入的字符数量,那么将Char转换为Int是我所知道的最短答案。
val numbers = txt.map(Character::getNumericValue)

可能是最清晰的答案,因为它不需要读者了解ASCII代码的低级细节。toString().toInt()选项对ASCII或Kotlin的知识要求最少,但有点奇怪,可能会让您的代码读者感到困惑(尽管在调查是否真的没有更好的方法之前,这是我用来解决错误的方法!)
编辑:我认为Andrejs的答案(https://dev59.com/5lYN5IYBdhLWcg3wVm6n#70315079)目前是最好的,我只是详细说明一下如何完整翻译OP的问题。
val text = "82389235"
val numbers = text.map { it.digitToInt() }

(我承认OP想要将数字添加到可变列表中,这种情况下最后一行应该以"numbers +="开头,而不是"val numbers ="。但由于OP可能主要关心的是将数字放入列表中,并且只是选择了可变列表,因为for循环需要它,所以我给出了我认为是最佳实践的示例:尽可能使变量不可变)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接