Scanner中next与nextLine的相关问题总结

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循环

待续…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值