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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:21:17