hasNext()和next()输入
hasNextLine()和nextLine输入
Scanner类
Scannner 类用于处理用户输入输出的类,位于java.util
包下,idea会自动导入相关的包:
import java.util.Scanner;
基本的声明语法:
Scanner scan = new Scanner(System.in);
hasNext() 方法:
最常用的是不带参数的hasNext(),即
boolean hasNext();
可以看到说明文档中的描述为,如果在这个扫描器的输入中有另外一个完整的token,就返回true,事实上没有返回false的情况,这个方法一般用于在调用next方法之前做判断。
public class ScannerTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("1");
if (scan.hasNext()) {
System.out.println("2");
String str = scan.next();
System.out.println("3");
System.out.println(str);
System.out.println("4");
}
}
}
通过多个输出,我们可以观察到代码的执行逻辑,启动一下代码:
(1)启动代码后,程序随即输出1,并阻塞住了,等待你的输入,即阻塞在了if (scan.hasNext())
(2)我们输入空格、或者回车、或者换行符:可以发现程序没有任何输出,也没有退出(观察一下光标的位置)。而是继续等待输入,这就验证了hasNext()
会自动忽略在输入有效字符前的空白符。其实后面的next()也是一样的。
(3)如果我们在控制台输入hello world
,并按下回车,仅仅输入出hello。这表明next()方法遇到空白符就会截断,next()方法不能在一行中获取多个以空白符间隔的字符串。
(4)如果我们把if语句改为while循环,启动程序,进行如下输入:可以看到并没有输出5,也就是说,在输入完之后,没有跳出while循环。又进入了等待的状态,期待下一轮输入。
public class ScannerTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("1");
while (scan.hasNext()) {
System.out.println("2");
String str = scan.next();
System.out.println("3");
System.out.println(str);
System.out.println("4");
System.out.println("******");
}
System.out.println("5");
}
}
总结
- next 一定要读取到有效字符后才可以结束输入。
- 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- next() 不能得到带有空格的字符串。
- 一般来说,hasNext()和next() 要配对使用