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
相关产品推荐
相关产品推荐

