目录
1.概念
2.常用api
3.next()方法
4.nextLine()方法
5.next()与nextLine()区别
6.实例
针对java5版本诞生,在jdk之前版本这次的版本是添加了java.util.Scanner类;其类是一个用于扫描输入文本的工具集。它不仅提供了可结合正则表达式和从输入流中检索某些特定数据项的方法,也提供了对任意字符串和基本类型的数据进行分析。你可以使用Scanner类,针对任意要处理的文本内容编写自定义的语法分析器,替你对数据进行分析是否符合你的预定内容格式。
总而言之,有该类的存在,还是非常的方便好用。它就是一个用户获取键盘输入的工具类,也可以从文件、字符串、输入流等中解析出基本类型等值。
下面是创建Scanner类的基本语法:
Scanner scanner = new Scanner(System.in);
如下是我实例了一个Scanner对象,通过对象点的形式,你可以看到它提供了这么多方法,那么我就对其中比较常用的api进行一下介绍吧。
然后其中还有nextXxx()与hasNextXxx() 方法,二者的作用就是nextXxx()是为了获取下一个输入,而hasNextXxx() 方法是判断是否有下一个输入项,其中Xxx可以是int、long、double等基础类型数据,若只判断是否包含下一个字符串,则你直接使用hasNext()方法即可。
接着我要重点来讲解一下next()与nextLine()方法,具有很好的参考价值。其中我先讲解下一下next方法,next()方法查找并返回来自此扫描器的下一个完整标记。切记,只读取输入直到空格。这点我会用示例给大家演示。
具体示例如下:
具体示例如下:
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入一个字符串");String str = scanner.next();System.out.println("您输入的字符串为:" + str);}
请输入一个字符串
adad dada dsada2
您输入的字符串为:adad
总而言之,示例2你们是看到了其空格所带来的问题,它不能读取由两个空格隔开的字符,next方法只读取空格之前的数据,并且光标指向本行。
上方讲解完了next方法,接着就我就给大家讲一下其nextLine()方法,其方法是返回输入源中下一行的所有内容。
具体示例如下:
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入一个字符串");String str = scanner.nextLine();System.out.println("您输入的字符串为:" + str);}
请输入一个字符串
abcd 123 hhhh
您输入的字符串为:abcd 123 hhhh
很明显, 对于next方法而言,nextLine方法是能完整读取到改行的所有内容,包括空格等,它是直接读到行尾才结束,然后回车,光标是直接定位到下一行。
给你们模拟一个场景,如何如何监听用户输入为日期格式的有效数据?对于这么个小的单元测试,我觉得你们大家肯定都能轻松写上来,唯独可能就是需要校验日期格式,因为如何匹配,给大家个参考,可以使用这个方法,hasNext(String pattern)
,其中pattern参数支持传入一个正则表达式,其中对于yyyy-MM-dd的日期格式正则写法为:[ ^\\d{4}-\\d{2}-\\d{2}$
]。
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入一个日期格式为:yyyy-MM-dd的字符串:");//判读输入格式是否为指定的日期格式if (scanner.hasNext("^\\d{4}-\\d{2}-\\d{2}$")) {System.out.println("输入的日期为:"+scanner.next());}else {System.out.println("输入的日期格式错误!");}}
接下来我们来测试验证一下:
请输入一个日期格式为:yyyy-MM-dd的字符串:
1
输入的日期格式错误!
请输入一个日期格式为:yyyy-MM-dd的字符串:
2022-06-29
输入的日期为:2022-06-29