You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java命令行下按|解析含空格输入异常的修复方案咨询

问题根源与修复方案

你的问题出在*Scanner.next()*这个方法的行为上!它默认把空白字符(空格、制表符、换行等)当成输入的分隔符,所以当输入包含空格时,它只会读取到第一个空格的位置就停下。比如你输入a|5|Hello World|3,next()只会拿到a|5|Hello,剩下的World|3会留在输入缓冲区里——如果后续代码不小心读取了这部分内容并拼接,就会导致split后的数组多出元素,最终触发数组越界。

修复方法

直接把*input.next()替换成input.nextLine()*就可以解决!nextLine()会读取用户输入的一整行内容(直到按下回车为止),不管中间有没有空格,这样line变量就能拿到完整的a|5|Hello World|3,再用split("\\|")分割,就能得到你预期的["a","5","Hello World","3"]数组。

修改后的完整代码:

Scanner input = new Scanner(System.in);
String line = input.nextLine(); // 读取整行输入,包含空格
String[] columns = line.split("\\|");

额外注意事项

如果你的代码在调用*nextLine()*之前,使用过next()、nextInt()、nextDouble()这类方法,要注意这些方法不会读取输入末尾的换行符,会导致nextLine()第一次调用时直接读取到空字符串。这种情况下,需要在调用nextLine()之前先调用一次input.nextLine()来清空缓冲区。不过看你的原始代码是直接读取输入,应该不会遇到这个问题。

内容的提问来源于stack exchange,提问作者D.D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:31:09