Java中Scanner类的next和nextLine的区分

在学习的过程中,碰到了关于Scanner中一些方法的问题,做了一些总结,分享给大家.

主要的疑问是关于next()和nextLine()这两个方法的问题

Scanner

对于Scanner类来说,首先我们在键盘上输入的数据,会通过Scanner存到缓冲区,然后经过内部的nextXXX方法获取得到数据.

image-20221101160114449

接下来我们来看看next和nextLine的用法解释吧

结论

那我们先得出结论,后面会通过举例子的方式证明这些结论的~

next()

  • next()读取数据的时候,将会从缓冲区读取第一个有效字符到第一个分割符为止
  • next()的分隔符是空白,例如换行符,空白符,制表符等等这些都是,且不会接受分割符

nextLine()

  • nextLine()读取数据的时候接受缓冲区上所有字符,在遇到回车换行符的时候停止,并且回车换行符也会接受到

注意上述的重点:

  1. next和nextLine的分割符的不同
  2. nextLine是会接受分割符[它的分割符是回车],但是next不会接受分割符

举例

nextLine

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入字符串(nextLine接收)");
        String s = scanner.nextLine();
        System.out.println(s);
    }

image-20221101160552424

next

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入字符串(next接收)");
        String s = scanner.next();
        System.out.println(s);
    }

image-20221101160806562

nextLine和next混合使用

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入字符串(nextLine接收)");
        String s = scanner.nextLine();
        System.out.println(s);
        System.out.println("输入字符串(next接收)");
        String next = scanner.next();
        System.out.println(next);
    }

当输入没有空格的文字的时候,两者都将输入的内容完整的打印出来了

image-20221101161020401

当输入的文字有空格的时候,理所当然的,只有next会打印不完整,nextLine依旧正常输出

image-20221101161150840

接下来我们看另一份代码

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入字符串(next接收)");
        String next = scanner.next();
        System.out.println(next);
        System.out.println("输入字符串(nextLine接收)");
        String s = scanner.nextLine();
        System.out.println(s);
    }

当我们运行程序之后会发现,在输入"这是一串代码"之后,没有后续的输入操作了程序就结束了,nextLine的输入都没有输,程序就结束了.

原因:

  • next读取到回车之后,由于next并不接受分隔符,所以将回车前面的数据读取到了,回车符依旧是留在了缓冲区中的
  • 那么当代码进行到第9行的时候,nextLine()在缓冲区读取,发现有数据,这个数据就是我们的回车符,所以直接读取回车符输出,这样就造成了我们都没输入任何内容程序就结束了

image-20221101161251816

当我们输入的内容内含有空格呢?会出现怎样的结果?

如图所示,答案依旧神奇,nextLine处读取到的内容是" 代码"

原因:

  • next遇到了字符"这是一串"后面的空格后就结束读取,将" 代码"存入到缓冲区
  • 当nextLine读取缓冲区的时候,恰好又将其读取了,所以输出

其实scanner.nextXXX本质是对缓冲区的读取,一定不能认为我们输入什么就会输出什么

image-20221101161825478

最后

现在回到最开始,去看我们的总结是不是十分明了了?🤣

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值