如何在Kotlin中将无空格字符串拆分为整数数组?
解决字符串转整数数组的问题,同时避免NumberFormatException
你遇到的NumberFormatException其实是拆分字符串时不小心生成了空字符串导致的——比如直接用split("")处理"123456",得到的数组会包含开头和结尾的空串,当你尝试把空串转成整数时自然就报错了。下面给你几种在Kotlin里解决这个问题的靠谱方法:
方法一:直接遍历字符转换(最推荐)
字符串本身是可迭代的,我们可以直接遍历每个字符,把它转成对应的整数:
val inputStr = "123456" // Kotlin 1.5+ 可以用更直观的digitToInt() val intArray = inputStr.map { it.digitToInt() }.toIntArray() // 如果是旧版本Kotlin,用ASCII差值的方式也一样好用 // val intArray = inputStr.map { it - '0' }.toIntArray()
原理很简单:每个字符形式的数字(比如'1')和字符'0'的ASCII码差值正好就是对应的整数,digitToInt()则是Kotlin封装好的便捷方法,两者效果完全一致。
方法二:拆分后过滤空串(如果你坚持用拆分的方式)
如果一定要用split方法,记得先过滤掉拆分产生的空字符串:
val inputStr = "123456" val intArray = inputStr.split("") .filter { it.isNotEmpty() } // 去掉开头和结尾的空串 .map { it.toInt() } .toIntArray()
这种方式虽然可行,但相比第一种多了拆分和过滤的步骤,效率稍低一点。
方法三:手动循环填充数组(适合理解底层逻辑)
如果你想更直观地控制整个过程,可以手动创建数组并逐个填充:
val inputStr = "123456" val intArray = IntArray(inputStr.length) for (index in inputStr.indices) { intArray[index] = inputStr[index].digitToInt() // 同样可以替换成 inputStr[index] - '0' }
这种方式适合新手理解字符串转数组的底层过程,逻辑清晰易懂。
内容的提问来源于stack exchange,提问作者abra
相关产品推荐
相关产品推荐

