如何在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]