如何让姓名输入读取空白字符?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
相关产品推荐
相关产品推荐

