我需要将一个字符串拆分成一个整数数组。我试过这个:
val string = "1234567"
val numbers = string.split("").map { it.toInt() }
println(numbers.get(1))
但抛出以下异常:
线程中的异常" main" java.lang.NumberFormatException:
对于输入字符串:""在 java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 在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]?
答案 0 :(得分: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<Int>
可以转换为这样的数组:
string.map { it.toString().toInt() }.toIntArray()
答案 1 :(得分:4)
您不需要split
,但您也不能直接在角色上调用toInt()
;这将为您提供Unicode值作为整数。您需要Character.getNumericValue()
:
val string = "1234567"
val digits = string.map(Character::getNumericValue).toIntArray()
println(digits[1])
打印2。
答案 2 :(得分:1)
如前所述,使用地图就足够了。我只想补充一点,你应该考虑你的字符串不仅包含数字的情况。
此扩展功能将处理:
fun String.toSingleDigitList() = map {
"$it".toIntOrNull()
}.filterNotNull()
用法:
val digits = "31w4159".toSingleDigitList()
结果:
[3,1,4,1,5,9]