Scanner.next和nextLine的区别

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之后就不会立即退出,而是会等到再次输入换行符。
    在这里插入图片描述

如有错误,欢迎批评指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值