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

简介: Scanner类中next()和nextLine()的区别

一、Scanner类的概念
Scanner是一个扫描获取用户输入的一个类,查看类的源码,可以看出基本数据类型除了char都可以进行输入。但是呢,用于接收用户输入字符串的方式有next()和nextLine()两种。

二、next()和nextLine两个的区别
在了解区别之前,我们先看一段代码,示例如下:

      /*
        在main方法中执行
      */
      Scanner scanner = new Scanner(System.in);
      System.out.println("请输入姓名:");
      String name = scanner.nextLine();
      System.out.println("请输入年龄:");
      int age = scanner.nextInt();
      System.out.println("请输入班级:");
      String Class = scanner.nextLine();
      System.out.println("您的个人信息如下:(请确认自己信息)");
      System.out.println("姓名:"+name);
      System.out.println("年龄:"+age);
      System.out.println("身份ID:"+Class);

从上可以看出,在输入年龄之后,我们还没来的及输入班级,本次用户输入就已经自动结束。

带着这个问题,我们一探究竟

2.1:探究next()和nextLine()的区别

      /*
        在main方法中执行
      */
      Scanner scanner = new Scanner(System.in);
      System.out.println("请输入文字:");
      String str1 = scanner.nextLine();
      System.out.println("请再次输入文字:");
      String str2 = scanner.next();
      System.out.println("nextLine方式输出的字符串:"+str1);
      System.out.println("next方式输出的字符串:"+str2);

看这次的输出结果:我们两次输入hello word,明显nextLine输出的结果可以含有空格,也就是说nextLine是以回车键作为输入的结束符号;

而next输出的则没有空格,就可以理解为next输入的字符串不能含有空格,并且,它是以空格、Tab、回车作为输入的结束符号,三者谁在前就先以谁为结束符号。

问:现在我们回到头部看第一段代码,我们就能发现,为什么还没等用户输入班级,就直接结束掉输入了呢?

答:因为nextLine他读取到我们在输入年龄之后的回车键来作为它的值。

出现这种问题,我们要如何解决呢?

两种解决方法:

第一种方法:

既然next来读取上一次回车作为它的值,那我们就在代码中优先读取一下回车,代码展示

      /*
        在main方法中运行
      */
      Scanner scanner = new Scanner(System.in);
      System.out.println("请输入姓名:");
      String name = scanner.nextLine();
      System.out.println("请输入年龄:");
      int age = scanner.nextInt();
      //在这里我们优先让他接收我们输入年龄之后的回车
      scanner.nextLine();
      System.out.println("请输入班级:");
      String Class = scanner.nextLine();

      System.out.println("您的个人信息如下:(请确认自己信息)");
      System.out.println("姓名:"+name);
      System.out.println("年龄:"+age);
      System.out.println("班级:"+Class);

完美解决!但是,这样虽然问题解决了,每次都要多谢一行代码,我们作为程序员就会很反感,有什么方法能让我不写这一行代码来解决呢?

当然有。自己动手写一个封装方法,通过把nextLine接收用户输入的的字符串,我们当作一个方法封装起来不就好了嘛。你们不想动手我来,直接拿走就行。代码如下:

package ymy.circulation.test;

import java.util.Scanner;
/**

  • 通过输入nextLine字符串当作一个方法进行封装起来,然后调用这个方法
    */
    public class ScannerDemo {

    private static Scanner extracted() {

     return new Scanner(System.in);
    

    }

    public static int getInt() {

     Scanner scanner = extracted();
     return scanner.nextInt();
    

    }

    public static String getString() {

     return extracted().nextLine();
    

    }
    }
    然后我们来测试类测试一下看看可行与否:

package ymy.circulation.test;

public class Text {
public static void main(String[] agrs) {

    System.out.println("请输入姓名:");
    String name = ScannerDemo.getString();//直接调用我们的封装方法
    System.out.println("请输入年龄:");
    int Class = ScannerDemo.getInt();


    //scanner.nextLine();//读取回车注释掉了哦

    System.out.println("请输入班级:");
    String Shenfen = ScannerDemo.getString();
    System.out.println("您的个人信息如下:(请确认自己信息)");
    System.out.println("姓名:"+name);
    System.out.println("年龄:"+Class);
    System.out.println("班级:"+Shenfen);
}

}
看结果

看来我们这个办法也是完美解决,可以看出读取回车作为自己的结果问题已经解决,亲测可行!

陪大家一起复盘他们两个的区别:

扫描类Scanner中next()和nextLine()的区别
next() nextLine()
不能读入含空格字符串;以空格、Tab、回车作为输入的结束符号 可以读入空格,以回车作为结束符号
不会读取回车作为值 会读取回车作为它的值
Ok,以上就是对两者的区别做了说明,还有不懂的话建议多敲两遍我上面的代码,还有不懂可以留言,转载请注明出处,祝大家工作顺心,文章有什么不足欢迎留言批评!

相关文章
|
存储 算法 NoSQL
还分不清 Cookie、Session、Token、JWT?看这一篇就够了
Cookie、Session、Token 和 JWT(JSON Web Token)都是用于在网络应用中进行身份验证和状态管理的机制。虽然它们有一些相似之处,但在实际应用中有着不同的作用和特点,接下来就让我们一起看看吧,本文转载至http://juejin.im/post/5e055d9ef265da33997a42cc
48967 13
|
存储 SQL 关系型数据库
【MySQL异常】Row size too large (> 1982). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNA
【MySQL异常】Row size too large (> 1982). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNA
342 0
|
4月前
|
人工智能 前端开发 JavaScript
前端实现多方言实时转写:VAD端点检测+流式ASR接入,识别准确率提升300%
本文面向前端工程师,详解多方言中文自动语音识别(ASR)的完整落地接入方案,涵盖录音采集、音质增强、编码传输、流式识别、结果合并等关键技术环节,助力实现“即录即识、边说边出字”的实时交互体验。
|
6月前
|
Linux
Linux命令拓展:为cp和mv添加进度显示
好了,就这样,让你的Linux复制体验充满乐趣吧!记住,每一个冷冰冰的命令背后,都有方法让它变得热情起来。
570 8
|
11月前
|
数据采集 SQL 人工智能
瓴羊Dataphin:AI驱动的数据治理——千里之行,始于标准 |【瓴羊数据荟】数据MeetUp第三期
数据标准是数据治理的核心抓手,通过梳理数据标准可以有效提升数据质量。瓴羊Dataphin平台利用AI技术简化数据治理流程,实现自动化的数据标准建立、质量规则构建和特征识别,助力企业在大模型时代高效治理数据,推动数据真正为业务服务。
926 28
瓴羊Dataphin:AI驱动的数据治理——千里之行,始于标准 |【瓴羊数据荟】数据MeetUp第三期
|
9月前
|
存储 安全
ArrayList 和 LinkedList 的区别是什么?
1. 数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实 现。 2. 随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数 据存储方式,所以需要移动指针从前往后依次查找。 3. 增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。 4. 内存空间占用:LinkedList 比 ArrayList 更占内存,因为 LinkedList 的节点除了存储数
|
前端开发 数据安全/隐私保护
前端技术实战:React Hooks 实现表单验证
【10月更文挑战第1天】前端技术实战:React Hooks 实现表单验证
|
存储 缓存 负载均衡
图解一致性哈希算法,看这一篇就够了!
近段时间一直在总结分布式系统架构常见的算法。前面我们介绍过布隆过滤器算法。接下来介绍一个非常重要、也非常实用的算法:一致性哈希算法。通过介绍一致性哈希算法的原理并给出了一种实现和实际运用的案例,带大家真正理解一致性哈希算法。
26988 66
图解一致性哈希算法,看这一篇就够了!
|
存储 SQL 监控
OceanBase 的水平扩展与性能优化
【8月更文第31天】随着业务的增长,单一数据库服务器往往难以满足日益增长的数据存储和处理需求。OceanBase 作为一款分布式数据库解决方案,通过其独特的水平扩展能力,能够在不牺牲性能的前提下支持海量数据存储和高并发事务处理。本文将详细介绍 OceanBase 的水平扩展机制,并提供一些性能优化的建议。
1119 0
|
druid Java 关系型数据库
Druid连接池的基本配置与使用
Druid连接池的基本配置与使用
4206 0
Druid连接池的基本配置与使用