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
46941 13
|
18天前
|
人工智能 前端开发 JavaScript
前端实现多方言实时转写:VAD端点检测+流式ASR接入,识别准确率提升300%
本文面向前端工程师,详解多方言中文自动语音识别(ASR)的完整落地接入方案,涵盖录音采集、音质增强、编码传输、流式识别、结果合并等关键技术环节,助力实现“即录即识、边说边出字”的实时交互体验。
|
存储 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
278 0
|
11月前
|
数据采集 机器学习/深度学习 存储
大数据的处理流程
【10月更文挑战第16天】
902 2
|
7月前
|
API
零门槛,体验DeepSeek-R1满血版
DeepSeek是当前性能最高、最受欢迎的大语言模型之一,但由于访问量大,官方服务响应较慢。阿里云百炼平台提供了高效响应的满血版DeepSeek R1,用户可通过ChatBox轻松接入体验。首先,需用阿里云账号登录并创建APIKEY,接着下载并安装ChatBox,按照指引操作即可畅享DeepSeek的强大功能。感谢阿里云的努力,期待更多优秀模型的接入。
363 9
|
6月前
|
存储 安全
ArrayList 和 LinkedList 的区别是什么?
1. 数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实 现。 2. 随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数 据存储方式,所以需要移动指针从前往后依次查找。 3. 增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。 4. 内存空间占用:LinkedList 比 ArrayList 更占内存,因为 LinkedList 的节点除了存储数
|
10月前
|
数据库 数据安全/隐私保护 Python
使用wxpython开发跨平台桌面应用,设计系统的登录界面
【11月更文挑战第12天】本文介绍了使用wxPython开发的简单跨平台桌面应用登录界面的示例代码。主要包括导入wxPython模块,创建登录界面类`LoginFrame`,定义界面布局与事件处理,以及启动应用程序的步骤。示例中实现了用户名和密码输入框及登录按钮的基本功能。
196 1
|
11月前
|
C语言 C++ 内存技术
SDL基础使用06 (SDL播放pcm文件)
如何使用SDL库在C和C++中播放PCM音频文件,包括初始化SDL音频、设置音频参数、读取PCM数据、播放音频以及资源释放的完整流程。
3560 1
|
并行计算 PyTorch 算法框架/工具
【Pytorch】查看GPU是否可用
本文提供了使用PyTorch检查GPU是否可用的方法,包括查看PyTorch版本、编译时使用的CUDA版本以及当前CUDA是否可用于PyTorch。
1344 2
|
机器学习/深度学习 算法 atlas
RAG 2.0架构详解:构建端到端检索增强生成系统
RAG(检索增强生成)旨在通过提供额外上下文帮助大型语言模型(LLM)生成更精准的回答。现有的RAG系统由独立组件构成,效率不高。RAG 2.0提出了一种预训练、微调和对齐所有组件的集成方法,通过双重反向传播最大化性能。文章探讨了不同的检索策略,如TF-IDF、BM25和密集检索,并介绍了如SPLADE、DRAGON等先进算法。目前的挑战包括创建可训练的检索器和优化检索-生成流程。研究表明,端到端训练的RAG可能提供最佳性能,但资源需求高。未来研究需关注检索器的上下文化和与LLM的协同优化。
1656 1