保姆级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()也是以此类推,只能读取符合该类型的数据,所以我们要根据我们输入的数据来匹配对应的方法。
在这里插入图片描述

  • 117
    点赞
  • 643
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值