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

如何让姓名输入读取空白字符?Java Scanner输入问题求助

问题解决:Java Scanner读取输入时的换行符残留问题

问题原因

你用sc.nextInt()读取功能选项后,这个方法只会读取输入的整数部分,不会处理整数后面的换行符(也就是你按回车的那个字符)。这个换行符会留在输入缓冲区里,当你接下来调用sc.nextLine()读取姓名时,它会直接把这个残留的换行符当成输入内容,导致姓名输入被跳过,看起来像是没读取到内容。而后面的ID输入正常,是因为第一个sc.nextLine()已经把残留的换行符消耗掉了,后续的sc.nextLine()就能正常读取用户输入了。

解决方法

有两种简单的解决方式,选一种就行:

方法一:消耗残留的换行符

在调用sc.nextInt()之后,额外调用一次sc.nextLine()来吃掉那个残留的换行符。修改代码如下:

System.out.print("\tEnter a selection: ");
input = sc.nextInt();
sc.nextLine(); // 新增这一行,消耗掉换行符

方法二:统一用nextLine()读取输入再转换

把读取功能选项的逻辑改成用sc.nextLine()读取整行,再转成整数,这样就不会残留换行符。修改代码如下:

System.out.print("\tEnter a selection: ");
// 先读取整行,再转成整数
String inputStr = sc.nextLine();
input = Integer.parseInt(inputStr);

代码修改示例(方法一)

修改后的关键部分代码:

System.out.print("\tEnter a selection: ");
input = sc.nextInt();
sc.nextLine(); // 新增该行处理换行符

if (input == 1) {
    faculty f = new faculty();
    System.out.print("Enter the faculty info:\n");
    System.out.print("\tName of Faculty: ");
    f.name = sc.nextLine(); // 现在能正常读取带空格的姓名了
    
    // 后续代码不变...
}

内容的提问来源于stack exchange,提问作者Dinstra Little

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:26:28