Kotlin读取控制台输入时输入/exit触发IndexOutOfBoundsException求助
解决Kotlin控制台输入解构赋值的IndexOutOfBoundsException问题
原代码中,当输入/exit时,split(" ")仅返回单个元素,但解构赋值给两个变量会触发IndexOutOfBoundsException——Kotlin的解构赋值要求集合元素数量与变量数量严格对应。
修复步骤
- 先捕获输入内容,避免直接使用
!!强制非空(可能引发空指针异常) - 优先判断退出指令,跳过后续分割逻辑
- 对输入分割结果做长度校验,过滤无效输入
完整修复代码
fun main() { while (true) { print("Enter two numbers in format: {source base} {target base} (To quit type /exit) ") // 处理输入为null的情况(如用户按下Ctrl+D) val input = readLine() ?: break val trimmedInput = input.trim() // 优先处理退出指令 if (trimmedInput == "/exit") { println("程序退出") break } // 分割输入并过滤空字符串(避免多空格导致的无效元素) val parts = trimmedInput.split(" ").filter { it.isNotEmpty() } // 校验分割结果长度 if (parts.size != 2) { println("输入格式错误,请输入两个用空格分隔的数字,或输入/exit退出") continue } // 安全解构赋值 val (sourceBase, targetBase) = parts // 这里添加你的进制转换逻辑 println("源进制:$sourceBase,目标进制:$targetBase") } }
关键说明
- 避免强制非空:用
?: break替代!!,防止输入为null时触发空指针异常 - 提前处理退出指令:直接跳过分割逻辑,从根源避免不匹配的解构赋值
- 输入校验:过滤空字符串并检查分割结果长度,覆盖用户输入单个数字、多空格等无效场景
内容的提问来源于stack exchange,提问作者Mati333
相关产品推荐
相关产品推荐

