我有一个字符串 = "1337",我想将其转换为Int列表,我尝试获取字符串中的每个元素并将其转换为Int,例如 string[0].toInt,但是我得到的不是数字,而是Ascii值。我可以使用 Character.getNumericValue(number) 来实现,但如何在不使用内置函数的情况下以较好的复杂度实现?
string.split("").filterNot { it.isBlank() }.map { it.toInt() }
解释: split("")
会将字符串拆分成每个字符的字符串列表,但它会在开头给你一个空字符串,这就是为什么我们有filterNot { it.isBlank() }
,然后我们可以使用map
将列表中的每个字符串转换为Int
如果你想要一些更少使用函数进行转换的命令式代码,可以使用以下方式:
val ints = mutableListOf<Int>() //make a list to store the values in
for (c: Char in "1234") { //go through all of the characters in the string
val numericValue = c - '0' //subtract the character '0' from the character we are looking at
ints.add(numericValue) //add the Int to the list
}
< p> c -'0'
可以生效的原因是数字的ASCII值按照从0开始的数字顺序排列,当我们将一个字符从另一个字符中减去时,我们得到它们之间的ASCII值的差。
如果您提供的字符串不仅包含数字,则结果可能会有些奇怪,但不会抛出任何异常。
在Java中可以通过将Char
转换为Int
获得对应的ASCII码。
而你也可以选择:
val values = "1337".map { it.toString().toInt() }
println(values[0]) // 1
println(values[1]) // 3
// ...
Char.digitToInt()
。 - Animesh SahuChar.digitToInt()
仍处于实验阶段。 - O.Badr可能像这样?非数字被过滤掉。然后将数字转换为整数:
val string = "1337"
val xs = string.filter{ it.isDigit() }.map{ it.digitToInt() }
需要使用Kotlin 1.4.30或更高版本以及此选项:
@OptIn(ExperimentalStdlibApi::class)
.split("")
是多余的,因为String已经实现了CharSequence
。 - Animesh Sahu