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

时间:2018-02-08 20:15:48

标签: arrays string split kotlin

我需要将一个字符串拆分成一个整数数组。我试过这个:

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]?

3 个答案:

答案 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]