Java Scanner输入异常咨询:按回车无即时输出,输入字符串后批量打印
Scanner空行输入无即时输出的问题解析
问题原因
核心问题出在Scanner.hasNext()方法的默认行为上:
hasNext()默认以空白字符(换行符、空格、制表符等)作为分隔符,它会跳过所有空白内容,仅当检测到非空白的输入时才返回true。- 当你连续按下回车(输入空行),输入缓冲区里只有换行符(属于空白字符),
hasNext()会一直阻塞,不会进入循环执行nextLine()和打印操作。 - 直到输入
Hello World!这类非空白内容,hasNext()才触发返回true,此时nextLine()会一次性读取缓冲区中所有积压的空行,导致之前的序号被批量打印出来。
解决方案
最直接有效的方法是用Scanner.hasNextLine()替代hasNext():
hasNextLine()的判断逻辑是是否存在下一行输入,不管该行是空行还是有内容,只要输入流中有换行符就会返回true,完全匹配你需要的空行触发打印的需求。
修改后的代码如下:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int count = 1; while (input.hasNextLine()) { String s = input.nextLine(); System.out.println(count + " " + s); count++; } input.close(); } }
修改后运行即可实现你的期望效果:每按一次回车就即时输出对应的序号,输入字符串时输出带内容的编号行。
内容的提问来源于stack exchange,提问作者Andalib Rasdi
相关产品推荐
相关产品推荐

