Scanner
next系列方法
next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。
next()查找并返回来自此扫描器的下一个完整标记。
完整标记的前后是空格键、Tab键或Enter键等分隔符。
next方法不能得到带空格的字符串。
nextLine()方法的结束符只是Enter键,
即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
Scanner in = new Scanner(System.in);
String a = in.next();
//in.nextLine();
String b = in.nextLine();
System.out.println(a);
System.out.println(b);
System.out.println("over");
idea输出窗口内容:
word//一次输入
word
over
Process finished with exit code 0
idea输出窗口内容:
word w w //一次输入
next() :word
nextLine() : w w
over
Process finished with exit code 0//线程停止
Scanner in = new Scanner(System.in);
String a = in.nextLine();
String b = in.nextLine();
System.out.println("nextLine() :" + a);
System.out.println("nextLine() :" + b);
System.out.println("over");
idea输出窗口内容:
w w //一次输入
w //二次输入
next() :w w
nextLine() :w
over
Process finished with exit code 0
Scanner in = new Scanner(System.in);
String a = in.next();
in.nextLine();
String b = in.nextLine();
in.nextLine();
System.out.println(a);
System.out.println(b);
System.out.println("over");
idea输出窗口内容:
wwww www ww//一次输入
qqq qqq qq//二次输入
next() :wwww
nextLine() : qqq qqq qq
over
只有一次输入
原因:
next()将后续的分隔符都留在了输入流中,因此Enter键也留在了输入流中
然后下面nextLine()运行时直接遇到了Enter结束符,就得到了一个空行。
有两次输入
原因:
nextLine()遇到Enter结束符后,会将Enter结束符从输入流中读走
hasNext系列方法
hasNext系列方法只会判断你缓冲区中的数据是否符合某种类型,而不会取出。
Scanner in = new Scanner(System.in);
while(in.hasNext()){
System.out.println("缓存区数据没有取出");
}
idea输出窗口内容:
a//输入
缓存区数据没有取出
缓存区数据没有取出
缓存区数据没有取出
缓存区数据没有取出
缓存区数据没有取出
缓存区数据没有取出
缓存区数据没有取出
缓存区数据没有取出
...//死循环
对比
Scanner in = new Scanner(System.in);
while(in.hasNext()){
in.next();//取出
System.out.println("缓存区数据没有取出");
}
idea输出窗口内容:
a//输入
缓存区数据取出
//但又陷入了无尽的while循环
陷入了无尽的while循环
原因:
hasNext()判断输入流中是否存在有效字符(会自动去掉有效字符前的各种类型的结束符)
当放到while中时,如果while中有取出操作,那么就会循环进行hasNext()判断,由于存在上述特性,如果你在输入框中直接回车(输入Enter键)或是其他任何结束符,hasNext()就会将这些有效符号前的结束符全部从输入流中自动去掉
while(in.hasNextInt()){
in.nextInt();//取出操作
System.out.println("缓存区数据取出");
}
System.out.println("over");
idea输出窗口内容:
453
缓存区数据取出
5667
缓存区数据取出
rret
over
Process finished with exit code 0
//线程停止了
hasNextInt()可以通过输入非int值使程序跳出while循环
待续…