我有一个看起来像"82389235"
的整数字符串,我想遍历它并将每个数字逐个添加到一个MutableList
中。然而,当我以我认为正确的方式处理时:
var text = "82389235"
for (num in text) numbers.add(num.toInt())
这将完全不相关的数字添加到列表中。然而,如果我使用println
将其输出到控制台,它会完美地迭代字符串。
如何正确将Char
转换为Int
?
我有一个看起来像"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)
Char.digitToInt(): Int
。println('5'.digitToInt()) // 5 (int)
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/digit-to-int.html
num
的类型为Char
。调用toInt()
将返回其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())
val numbers: List<Int> = "82389235".map(Character::getNumericValue)
val numbers = txt.map { it - '0' }
val numbers = txt.map(Character::getNumericValue)
val text = "82389235"
val numbers = text.map { it.digitToInt() }
'0'.toInt()
正确返回48
,如答案所解释的那样,这是字符'0'
的 ASCII 码。如果您想获取包含数字的字符的数值,您需要从其中减去字符'0'
的 ASCII 值。 - zsmb13