Java中Scanner类使用保姆级教程

 更新时间:2023年04月26日 11:24:24   作者:努力努力再努力c.  
JavaSE在java.util类库中提供了一个专门用于输入操作的类Scanner类,可以使用该类创建一个对象,然后利用该对象的相关方法从键盘上读取数据,下面这篇文章主要给大家介绍了关于Java中Scanner类使用的相关资料,需要的朋友可以参考下

一、Scanner类简介

Scanner类是在jdk1.5版本引入的,它在java的util工具包下,主要用于扫描用户从控制台输入的文本。

当我们需要通过控制台输入数据时,只需要事先导入java.util包中的Scanner类,然后调用Scanner类,我们的程序就能获取我们在控制台所输入的数据了。

二、如何使用Scanner类

1、首先导入java.util.Scanner包;

import java.util.Scanner;

2、创建Scanner类对象

Scanner sc = new Scanner(System.in);

3、创建一个变量来接收输入的数据

//运用上面创建的sc对象调用对应的方法,控制台即可等待用户输入,我们自定义一个变量来接收即可
//我们想要输入的数据类型不同,也需要调用不同的方法,具体应用如下:
String str = sc.nextLine();
String str = sc.next();
byte a1= sc.nextByte();
short a2= sc.nextShort();
int a3 = sc.nextInt();
long a4 = sc.nextLong();
float a5 = sc.nextFloat();
double a6 = sc.nextDouble();
boolean a7 = sc.nextBoolean();

4、关闭Scanner类

//使用完Scanner后,我们一定要记得将它关闭!
//因为使用Scanner本质上是打开了一个IO流,如果不关闭的话,它将会一直占用系统资源。
sc.close();
//但是注意一旦你关闭后,就算在sc.close()这行代码后你再重新new Scanner(System.in),那也不能重新再打开一个扫描器了,如下图会发现程序会报错
//所以大家一定要在用不到扫描器之后再关闭,即把sc.close()代码放到最后。

三、next()和nextLine()的区别(很重要)

从上面的讲解,我们会发现当我们想要输入的数据类型是String时,我们有两个方法可以调用:next()和nextLine()。那这两种方法具体有什么区别呢?我们继续往下看:

(1)我们先来测试一下next():

使用多组测试用例测试后,分析输出结果不难得出以下结论(这里只贴了经典测试案例,其他的大家可以自行测试):

next()方法在识别输入的字符串时,不能得到我们输入的带有空格的字符串,只是读取到了hello。

这说明next()在读取到有效字符之后会以空格作为自己的读取结束标识符,因为我们可以发现hello前面的空格并没有影响到方法的读取。所以next()用法总结如下:

next()用法总结:
1. 一定要读取到有效字符后才可以结束输入。
2. 对输入的有效字符之前所遇到的空白,会自动将其去除。
3. 只有输入的有效字符后才将其后面输入的空白作为结束符。
4. next()不能得到带有空格的字符串。
5. 读取结束后,该方法会将我们的鼠标定位在我们输入数据的那一行。

(2)再来测试一下nextLine():

分析结果发现,输入结果与输入结果完全一致,nextLine()并没有被字符串中间的空格影响读取结果。

这是因为该方法以的是回车符(也就是我们键盘的enter键)作为结束标识符。

nextLine()用法总结:
1、以回车符作为结束标识符,获取到的是回车符前输入的所有字符串(包括空格)。
2、读取结束后,该方法会将我们的鼠标定位在我们输入数据的那一行的下一行。

(3)先使用nextLine再使用next()、nextInt()等没问题,但是先使用next()和nextInt()等之后就不可以再紧跟nextLine使用。(这一点很重要!!!)

这是因为next()等这些方法读取结束后会紧跟一个回车符,而nextLine会直接读取到这个回车符,这就导致出现我们还没有来得及输入我们想要输入的数据,nextLine就以为我们已经输入完了这样的情况!

解决办法也很简单:我们直接在next()使用后加两个nextLine()就OK了,这样第一个nextLine()就会当一个‘替死鬼’,第二个nextLine()我们就可以输入自己想要输入的数据啦!

四、hash×××()的简单使用

我们发现Scanner类的实例变量还会有以hash开头的一系列方法,那这些方法是干什么的呢?

我们直接上测试用例,大家直观体会:

五、Scanner方法汇总

该图的意思其实就是,比如:nextlnt():只能读取int值,用户如果输入了其他非整型的数据,程序就会报错。

其他的如nextByte()、nextDouble()也是以此类推,只能读取符合该类型的数据,所以我们要根据我们输入的数据来匹配对应的方法。

总结

到此这篇关于Java中Scanner类使用保姆级教程的文章就介绍到这了,更多相关Java Scanner类使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot2.x引入feign踩的坑及解决

    springboot2.x引入feign踩的坑及解决

    这篇文章主要介绍了springboot2.x引入feign踩的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Spring中IOC和AOP的核心组成架构详解

    Spring中IOC和AOP的核心组成架构详解

    这篇文章主要介绍了Spring中IOC和AOP的核心组成架构详解,本文是对Spring的2大核心功能——IoC和AOP 的总结提炼,并增加了环境profile和条件化bean的内容,篇幅较短,更像是一个大纲,或者思维导图,需要的朋友可以参考下
    2023-08-08
  • Spring轻松解决循环依赖

    Spring轻松解决循环依赖

    Spring的解决循环依赖是有前置条件的,要解决循环依赖我们首先要了解Spring Bean对象的创建过程和依赖注入的方式。依赖注入方式,我之前的博客有所分享,大家可以在看本篇文章之前进行一下小小的回顾
    2023-04-04
  • Java项目中如何访问WEB-INF下jsp页面

    Java项目中如何访问WEB-INF下jsp页面

    这篇文章主要介绍了Java项目中如何访问WEB-INF下jsp页面,文章通过示例代码和图文解析介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 详解java中String、StringBuilder、StringBuffer的区别

    详解java中String、StringBuilder、StringBuffer的区别

    这篇文章主要介绍了java中String、StringBuilder、StringBuffer的区别,文中讲解的很清晰,有对于这方面不太懂的同学可以研究下
    2021-02-02
  • java图形化界面实现登录窗口

    java图形化界面实现登录窗口

    这篇文章主要为大家详细介绍了java图形化界面实现登录窗口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Spring手写简化版MVC流程详解

    Spring手写简化版MVC流程详解

    Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。本文将通过简单示例带大家掌握SpringMVC简化版手写方法,感兴趣的可以了解一下
    2022-11-11
  • java如何多线程批量更新10万级的数据

    java如何多线程批量更新10万级的数据

    在处理大数据量的批量更新时,直接使用mybatis的updateBatch可能导致效率低下甚至OOM,通过每次处理5000条数据的方式虽然安全但效率低,更优的解决方案是使用多线程处理,将数据分批并多线程执行,有效提高了处理速度并保证了系统稳定性
    2024-10-10
  • Springmvc ajax跨域请求处理方法实例详解

    Springmvc ajax跨域请求处理方法实例详解

    这篇文章主要介绍了Springmvc ajax跨域请求处理方法实例详解,需要的朋友可以参考下
    2017-10-10
  • SpringSecurityOAuth2实现微信授权登录

    SpringSecurityOAuth2实现微信授权登录

    微信的登录功能是用户注册和使用微信的必经之路之一,而微信授权登录更是方便了用户的登录操作,本文主要介绍了SpringSecurityOAuth2实现微信授权登录,感兴趣的可以了解一下
    2023-09-09

最新评论