Java输入含空格字符串触发InputMismatchException问题求助
解决Scanner输入含空格字符串时的InputMismatchException问题
嘿,我来帮你搞定这个棘手的小问题!从你贴的异常栈信息来看,问题根源出在Scanner的读取逻辑上,咱们来捋清楚:
为什么会报错?
你应该是在读取这个含空格的字符串之前,先用了scanner.nextInt()来获取菜单选择(比如选中case 9)。这里的坑在于:
nextInt()只会读取输入的整数部分,把输入末尾的换行符留在了输入缓冲区里。- 如果你接下来用
scanner.next()读取字符串,它会自动跳过开头的空白,但next()的规则是读到空格就停止读取——输入"Hey you"的话,它只会取走"Hey",剩下的"you"会留在缓冲区里。 - 之后如果你的代码里还有需要读取整数的操作(比如回到菜单选择),
scanner.nextInt()会尝试把缓冲区里的"you"解析成整数,这肯定会抛出InputMismatchException! - 而输入无空格字符串时,
next()会把整个字符串读完,缓冲区没残留,自然不会触发错误。
怎么解决?
最简单的办法是用scanner.nextLine()来读取完整的字符串(包括空格),但要记得先处理掉nextInt()残留的换行符,具体代码修改如下:
case 9: System.out.println("请输入要写入文件的内容:"); // 关键步骤:跳过nextInt()留下的换行符 scanner.nextLine(); // 读取完整的字符串,支持含空格的内容 String inputContent = scanner.nextLine(); // 写入文件的逻辑(示例) try (FileWriter fileWriter = new FileWriter("output.txt")) { fileWriter.write(inputContent); System.out.println("内容成功写入文件!"); } catch (IOException e) { System.err.println("写入文件时出错:" + e.getMessage()); e.printStackTrace(); } break;
额外小提示
如果你不想用nextLine()处理换行,也可以用scanner.skip("\\R")来精准跳过换行符,效果是一样的,代码更简洁一点:
scanner.skip("\\R"); String inputContent = scanner.nextLine();
这样修改后,不管输入的字符串有没有空格,都能完整读取,也不会再触发输入不匹配的异常啦!
内容的提问来源于stack exchange,提问作者Nigel Perey
相关产品推荐
相关产品推荐

