Scanner.next和nextLine的区别
- next():该方法会忽略有效字符之前的所有空白字符,遇到空白字符截止,并且不会将空白字符从io流中取出,所以使用next不能得到类似"132 34"带有空格的字符串
- nextLine():遇到换行符截止,会将换行符从io流中取出
- 空白字符不等于空格。空白字符包括空格,换行符,制表符等。
- 流的概念
在控制台界面输入字符的时候字符并没有立即进入io流,而是位于一个缓冲区当中,等到输入回车时,会将缓冲区中的内容送到io流当中,也包括输入的回车
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
if(sc.hasNext()){
String str = sc.next();
String str2 = sc.next();
System.out.println(str);
System.out.println(str2);
}
sc.close();
}
}
也就是说我输入的123 456在第一次next的时候从io流中流出123(next方法的特性,有效字符之前的空白字符均忽略,然后遇到空白字符截止),后一个next首先忽略io流中剩下的空格(空白符的一种)继续读取接下来的456,之后遇到换行符(空白符的一种)结束。此时换行符还留在io流当中。后面有代码展示。
- next方法在遇到空白字符截止后,并没有丢掉它所遇到的那个空白字符,而是继续把他留在io流当中,可以通过nextLine()方法读取的内容看出(nextLine不忽略空格,next会)
- next将123读取完之后,遇到换行符结束,并把换行符留在了io流当中,等到nextLine过来读取的时候,直接就遇到换行符结束。所以str2变量中什么都没有。nextLine会将遇到的换行符从io流中取出,所以再一次nextLine之后就不会立即退出,而是会等到再次输入换行符。
如有错误,欢迎批评指正