Kotlin按空格分割字符串生成的数组无法移除空白元素如何解决
问题解决说明
核心错误点
- 你按单个空格拆分连续空格时,生成的空白元素是空字符串
"",不是空格字符串" ",因此i == " "的判断条件永远不成立,移除逻辑不会执行。 - 直接在for循环遍历MutableList的过程中删除元素,会触发索引错位,即使判断条件修正,也会出现漏删甚至数组越界问题。
解决方案
最优方案:拆分时直接过滤空元素
Kotlin的split函数自带忽略空元素的参数,无需额外写移除逻辑,修改第一行代码即可:
// 按单个空格拆分,直接忽略空元素 var input = readLine()?.trim()?.split(" ", ignoreEmpty = true)?.toMutableList()
如果要兼容命令行输入中可能出现的多空格、制表符混合场景,更推荐用正则匹配任意空白字符拆分:
// 按任意数量的空白字符拆分,适配更多输入场景 var input = readLine()?.trim()?.split("\\s+".toRegex())?.toMutableList()
替代方案:手动过滤列表
如果你确实需要对已有列表做空白元素过滤,直接使用Kotlin内置的filter函数即可,无需手写循环:
input = input?.filter { it.isNotBlank() }?.toMutableList()
测试你输入的repeat 5 5,两种方案输出均为[repeat, 5, 5],符合预期。
内容的提问来源于stack exchange,提问作者Dannode36
相关产品推荐
相关产品推荐

