scanner类中next()和nextLine()的区别

Scanner类中next()和nextLine()的区别

public class Next_And_NextLine {

    private static Scanner scanner = new Scanner(System.in);
    public static void main(String[] args) {
        System.out.println("代码1");
        code1();
        System.out.println("==========================================");
        System.out.println("代码2");
        code2();
    }

    public static void code1(){
        String string = scanner.next();
        System.out.println(string);
        string = scanner.nextLine();
        System.out.println(string);
    }

    public static void code2(){
        String string = scanner.nextLine();
        System.out.println(string);
        string = scanner.next();
        System.out.println(string);

    }
}

下图是执行过程
zimodest
上面的代码中的方法code1()和code2()除了next()和nextLine()的执行顺序不同外,其他都相同,但是code2()有两次输入,而code1()只有一次输入,为什么会出现这种情况,下面是这这个过程的工作原理

工作原理

Scanner是一个扫描器,它扫描数据是从内存中一块缓冲区中扫描并读入数据的,而我们在控制台输入的数据也是先放入缓冲区中等待扫描器的扫描读取,这个扫描器在扫描过程中判断停止的依据是“空白符”(回车 空格等)从键盘输入的数据开始先保存在内存中的缓冲区中,而next()和nextLine()都是从缓冲区中读取数据
next(): 在扫描缓冲区遇到空白符结束时,将空白符之前的数据返回,在缓冲区中留下制表符,空格、换行符等空白符
nextLine():nextLine() 在遇到换行符符结束时,将空白符和空白符之前的数据都返回

看过工作原理后,来仔细了解一下这个过程
执行code1() 时,当遇到next()函数时,程序等待用户的输入,在上图中只看到输入了abc,但是在缓冲区中会出现换行符,因此,缓冲区中的数据是abc和换行符,有因为next()的工作原理,将abc读取后,在缓冲区中留下了换行符,下次读取的起点定位到abc之后换行符之前,当紧接着使用nextLine()函数时,它会自动读取换行符,函数结束,不会等待用户的输入

先使用nextLine()时,该函数会将缓冲区中扫描过的字符包括空白符都返回,接下来使用next()函数时,就会等待用户的输入

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值