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

相关文章

  • Zookeeper Curator使用介绍

    Zookeeper Curator使用介绍

    curator是Netflix公司开源的⼀套Zookeeper客户端框架,和ZKClient⼀样,Curator解决了很多Zookeeper客户端非常底层的细节开发⼯作,包括连接重连,反复注册Watcher和NodeExistsException异常等,是最流行的Zookeeper客户端之⼀
    2022-09-09
  • Java中的枚举enum详细解读

    Java中的枚举enum详细解读

    这篇文章主要介绍了Java中的枚举enum详细解读,当我们使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类,当有多个枚举对象时,使用逗号 ,隔开,最后一个用分号;结尾,需要的朋友可以参考下
    2024-01-01
  • 简单了解Java编程中对异常处理的运用

    简单了解Java编程中对异常处理的运用

    这篇文章主要简单介绍了Java编程中对异常处理的运用,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • Java的枚举,注解和反射(二)

    Java的枚举,注解和反射(二)

    今天小编就为大家分享一篇关于Java枚举,注解与反射原理说明,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-07-07
  • spring boot自定义配置时在yml文件输入有提示问题及解决方案

    spring boot自定义配置时在yml文件输入有提示问题及解决方案

    自定义一个配置类,然后在yml文件具体配置值时,一般不会有提示,今天小编给大家分享spring boot自定义配置时在yml文件输入有提示问题,感兴趣的朋友一起看看吧
    2023-10-10
  • springboot调用webservice-soap接口的实现

    springboot调用webservice-soap接口的实现

    接口协议目前广泛使用的有http协议和RPC协议和webservice,本文主要介绍了springboot调用webservice-soap接口的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 聊聊spring boot的WebFluxTagsProvider的使用

    聊聊spring boot的WebFluxTagsProvider的使用

    这篇文章主要介绍了聊聊spring boot的WebFluxTagsProvider的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • SpringMVC+Mybatis二维码实现多平台付款(附源码)

    SpringMVC+Mybatis二维码实现多平台付款(附源码)

    本文主要实现微信支付宝等支付平台合多为一的二维码支付,并且实现有效时间内支付有效,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 深入了解Java核心类库--泛型类

    深入了解Java核心类库--泛型类

    这篇文章主要为大家详细介绍了java泛型类定义与使用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助
    2021-07-07
  • 详解SpringBoot中Controller接收对象列表实现

    详解SpringBoot中Controller接收对象列表实现

    这篇文章主要介绍了详解SpringBoot中Controller接收对象列表实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论