在 Kotlin 中如何将没有空格的字符串分割成整数数组?

12

我需要将一个字符串分割成整数数组。我尝试了以下代码:

val string = "1234567"
val numbers = string.split("").map { it.toInt() }
println(numbers.get(1))

但是会抛出以下异常:

Exception in thread "main" java.lang.NumberFormatException:
For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:592) at java.lang.Integer.parseInt(Integer.java:615) at net.projecteuler.Problem_008Kt.main(Problem_008.kt:54)

如何将字符串 "123456" 转换为数组 [1,2,3,4,5,6]?

3个回答

14

你的 split("") 方法得到的结果是 [, 1, 2, 3, 4, 5, 6, 7, ],也就是说第一个和最后一个元素无法转换成数字。

实际上,CharSequence.map 就可以满足你的需求:

val numbers = string.map { it.toString().toInt() } //[1, 2, 3, 4, 5, 6, 7]

使用这段代码,String 中的单个字符将被转换为相应的 Int 表示。结果是一个 List<Int>,可以像这样转换为数组:

string.map { it.toString().toInt() }.toIntArray()

7

不仅不需要使用split,而且也不能直接调用字符上的toInt()方法;这将返回它的Unicode值作为整数。您需要使用Character.getNumericValue()

val string = "1234567"
val digits = string.map(Character::getNumericValue).toIntArray()
println(digits[1])

它会打印出2。


4

如已经提到的,使用map就足够了。我只想补充一点,你应该考虑字符串不仅包含数字的情况。

这个扩展函数可以解决这个问题:

fun String.toSingleDigitList() = map {
    "$it".toIntOrNull()
}.filterNotNull()

使用方法:

val digits = "31w4159".toSingleDigitList()

Result:

[3, 1, 4, 1, 5, 9]


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