大多数人对hasNext的印象停留在“判断是否有下一个值”上,而该方法还是一个阻塞式的方法
hasNext和hasNextLine的区别
二者都是用于判断“有无键盘输入”的,有则返回true,没有则阻塞!一定记住是阻塞而不是返回false,很多人都说是返回false,但你查源码会发现是不会返回false的,他会让你一直阻塞在判断阶段,二者只是在细节上有不同
- hasNext()方法会判断接下来是否有非空字符.如果有,则返回true,没有则阻塞。例如一直敲回车相当于一直判断为空字符,但是不会返回false,而是一直阻塞在判断阶段,直到你输入了非空字符
- hasNextLine() 方法会根据行匹配模式去判断接下来是否有一行(包括空行),如果有,则返回true。这个没什么特别的,只要是你敲了回车那都是true并且不会阻塞
例如像这种if语句是永远不可能执行到内部方法体的
if(scan.hasNext()==false){
System.out.println("hasNext和hasNextLine不会返回false");
}
再举一个例子加深理解:
Scanner scan = new Scanner(System.in);
System.out.println(scan.hasNextLine());
System.out.println(scan.hasNext());
运行该代码,一直不停敲回车键,第一次回车会直接输出true,而后面一直敲都会阻塞在hasNext语句上,运行如下图