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类使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用ServletInputStream在拦截器或过滤器中应用后重写

    使用ServletInputStream在拦截器或过滤器中应用后重写

    这篇文章主要介绍了使用ServletInputStream在拦截器或过滤器中应用后重写,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • maven项目打包如何去掉不需要的module

    maven项目打包如何去掉不需要的module

    文章总结:在my-project工程依赖my-core和my-common,且my-project在总工程AAA中时,建议通过以下两种方案优化打包流程:1. 使用pom区分,重新编写pom文件,并指定需要重新编译的工程到modules中,然后在编译时指定pom文件;
    2024-12-12
  • Java基础概述面试题复习

    Java基础概述面试题复习

    这篇文章主要介绍了java基础面试题,文中的描述非常详细,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下,希望能给你带来帮助
    2021-08-08
  • Java中父类Object的常用方法总结

    Java中父类Object的常用方法总结

    这篇文章给大家介绍了Java中父类Object的三个常用方法,对大家学习或使用Java具有一定的参考借鉴价值,有需要的朋友们下面来一起看看吧。
    2016-09-09
  • JavaWeb连接数据库MySQL的操作技巧

    JavaWeb连接数据库MySQL的操作技巧

    数据库是编程中重要的一部分,它囊括了数据操作,数据持久化等各方面。在每一门编程语言中都占有相当大的比例。本次,小编以MySQL为例,使用mvc编程思想,给大家讲解下javaweb对数据库的操作
    2017-02-02
  • java处理数据库不支持的emoji表情符问题解决

    java处理数据库不支持的emoji表情符问题解决

    这篇文章主要介绍了java处理数据库不支持的emoji表情符问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 通过实例解析Spring Ioc项目实现过程

    通过实例解析Spring Ioc项目实现过程

    这篇文章主要介绍了Spring Ioc项目实践过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • JavaWeb入门:HttpResponse和HttpRequest详解

    JavaWeb入门:HttpResponse和HttpRequest详解

    这篇文章主要介绍了Django的HttpRequest和HttpResponse对象,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2021-07-07
  • 一文带你学会Java事件机制

    一文带你学会Java事件机制

    今天小编就为大家分享一篇关于Java事件机制的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-10-10
  • Java实现对象复制的方法实例

    Java实现对象复制的方法实例

    这篇文章主要介绍了Java实现对象复制的方法实例,深复制:复制出来的对象中的变量(包括基本类型和字符串)和原来的对象的值都相同,引用对象也会指向复制出来的对象,需要的朋友可以参考下
    2023-08-08

最新评论