如何在Kotlin中将没有空格的字符串拆分为整数数组?
我需要将一个字符串拆分成一个整数数组。 我试过这个:
val string = "1234567" val numbers = string.split("").map { it.toInt() } println(numbers.get(1))
但引发以下exception:
线程“main”中的exceptionjava.lang.NumberFormatException:
对于输入字符串:“”在java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)在java.lang.Integer.parseInt(Integer.java:592)在java.lang.Integer.parseInt(Integer.java:615 )at net.projecteuler.Problem_008Kt.main(Problem_008.kt:54)
如何将字符串“123456”转换为数组[1,2,3,4,5,6]?
你的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
,它可以像这样转换成一个数组:
string.map { it.toString().toInt() }.toIntArray()
你只是不需要split
,但是你也不能直接在字符上调用toInt()
。 这会给你它的Unicode值作为一个整数。 你需要Character.getNumericValue()
:
val string = "1234567" val digits = string.map(Character::getNumericValue).toIntArray() println(digits[1])
它打印2。
就像已经说过的那样,使用地图就够了。 我只是想补充一点,你应该考虑你的字符串不仅包含数字的情况。
这个扩展function可以解决这个问题:
fun String.toSingleDigitList() = map { "$it".toIntOrNull() }.filterNotNull()
用法:
val digits = "31w4159".toSingleDigitList()
结果:
[3,1,4,1,5,9]