ibr*_*ord 15 list character data-conversion kotlin
所以我有一个String看起来像的整数"82389235",但我想迭代它以将每个数字分别添加到a MutableList.但是,当我按照我认为可以处理的方式进行操作时:
var text = "82389235"
for (num in text) numbers.add(num.toInt())
Run Code Online (Sandbox Code Playgroud)
这会将与字符串完全无关的数字添加到列表中.然而,如果我用println它将它输出到控制台,它会很好地遍历字符串.
如何正确转换Char为Int?
s1m*_*nw1 24
那是因为num是a Char,即结果值是该char的ascii值.
这样就可以了:
val txt = "82389235"
val numbers = txt.map { it.toString().toInt() }
Run Code Online (Sandbox Code Playgroud)
该map可进一步简化:
map(Character::getNumericValue)
Run Code Online (Sandbox Code Playgroud)
And*_*ejs 16
从 Kotlin 1.5 开始,有一个内置函数Char.digitToInt(): Int:
println('5'.digitToInt()) // 5 (int)
Run Code Online (Sandbox Code Playgroud)
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/digit-to-int.html
变量num的类型为Char。调用toInt()它会返回其 ASCII 代码,这就是您要添加到列表中的内容。
如果要附加数值,只需从每个数字中减去 0 的 ASCII 代码:
numbers.add(num.toInt() - '0'.toInt())
Run Code Online (Sandbox Code Playgroud)
像这样更好一点:
val zeroAscii = '0'.toInt()
for(num in text) {
numbers.add(num.toInt() - zeroAscii)
}
Run Code Online (Sandbox Code Playgroud)
这也适用于map操作,因此您根本不必创建MutableList:
val zeroAscii = '0'.toInt()
val numbers = text.map { it.toInt() - zeroAscii }
Run Code Online (Sandbox Code Playgroud)
或者,您可以将每个字符单独转换为 a String,因为String.toInt()实际上解析了数字 - 就创建的对象而言,这似乎有点浪费:
numbers.add(num.toString().toInt())
Run Code Online (Sandbox Code Playgroud)
在JVM上有高效的java.lang.Character.getNumericValue()可用:
val numbers: List<Int> = "82389235".map(Character::getNumericValue)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9625 次 |
| 最近记录: |