java115

Scanner类

**

打印流解决的是output stream的缺陷,BufferedReader解决的是Input Stream的缺陷,而java.util.Scanner解决的是BufferedReader类的缺陷(替换了BufferedReader类)。

Scanner是一个专门进行输入流处理的程序类,利用这个类,可以方便的处理各种数据类型,同时也可以直接结合正则表达式进行各项处理。

在这个类中主要关注以下的几个方法:

1.判断是否有指定类型的数据:Public boolean hasNextXxx():

2.取得指定类型的数据:public数据nextXxx()

3.定义分割符:public scanner useDelimiter(String pattern);

4.构造方法:public scanner(InputStream source)

范例1:使用scanner实现数据的输入

java 复制代码
package cn. mldn . demo;

import java . util .Scanner;

public class TestDemo {

public static void main(String[] args) throws Exception {

Scanner scan = new Scanner(System.in) ;

System. out . print("请输入数据: " );

if (scan.hasNext()) { //现在有输入内容,不判断空字符串

System. out . println(" 【ECHO】 输入内容为: " + scan.next());

}

scan. close();

}

}

代码执行:请输入数据:hello

【ECHO】输入内容为:hello

这就要比BufferedReader更简单。

使用scanner的输入,还可以接收各种数据类型,并且帮助用户减少转型的处理。

范例2:接收其他类型

java 复制代码
package cn. mldn . demo;

import java . util .Scanner;

public class TestDemo {

public static void main(String[] args) throws Exception {

Scanner scan = new Scanner(System.in) ;

System. out . print("请输入年龄: " );

if (scan.hasNextInt()) { //现在有输入内容,不判断空字符串

Int age =scan.NextInt();

System. out . println(" 【ECHO】 输入内容为: " + age);

}else{

System. out . println(ERROR:输入的不是数字!")

}

scan. close();

}

}

代码执行:请输入年龄:fgsdafsd

ERROR:输入的不是数字!

请输入年龄:10

【ECHO】:输入内容为:10

最为重要的问题它可以对接收的数据类型使用正则表达式进行判断。

范例:利用正则进行判断

java 复制代码
package cn. mldn . demo;

import java . util .Scanner;

public class TestDemo {

public static void main(String[] args) throws Exception {

Scanner scan = new Scanner(System.in) ;

System. out . print("请输入生日: " );

if(scan.hasNext("\\d{4}-\\d{2}-\\d{2}")){

String birthday=scan.next("\\d{4}-\\d{2}-\\d{2}");

System.out.println("【ECHO】"+birthday);

}

scan. close();

}

}

代码执行:请输入生日:1111-11-11

【ECHO】1111-11-11

但是以上的操作在开发之中,基本上是不会出现的,因为不可能让你编写一个命令行程序进行数据的输入操作。

使用Scanner本身能够接收的是一个input stream类的对象。那么也就意味着可以接收任意的输入流,例如:文件输入流;

canner实际上完美的替代了BufferedReader,而且更好的实现了Input Stream的操作。

二、总结

以后除了二进制的文件拷贝的处理之外,那么只要是针对于程序的信息输出都使用打印流,信息输入都使用Scanner。

相关推荐
java1234_小锋4 分钟前
Java高频面试题:Spring-AOP通知和执行顺序?
java·开发语言·spring
番茄去哪了8 分钟前
Java基础面试题day02
java·开发语言·面向对象编程
我是咸鱼不闲呀24 分钟前
力扣Hot100系列22(Java)——[图论]总结(岛屿数量,腐烂的橘子,课程表,实现Trie(前缀树))
java·leetcode·图论
1104.北光c°24 分钟前
深入浅出 Elasticsearch:从搜索框到精准排序的架构实战
java·开发语言·elasticsearch·缓存·架构·全文检索·es
MSTcheng.30 分钟前
【优选算法必修篇——位运算】『面试题 01.01. 判定字符是否唯一&面试题 17.19. 消失的两个数字』
java·算法·面试
蹦哒32 分钟前
Kotlin 与 Java 语法差异
java·python·kotlin
左左右右左右摇晃33 分钟前
Java并发——并发编程底层原理
java·开发语言
一个有温度的技术博主38 分钟前
Redis系列八:Jedis连接池在java中的使用
java·redis·bootstrap
cyforkk40 分钟前
Java 并发编程教科书级范例:深入解析 computeIfAbsent 与方法引用
java·开发语言
后青春期的诗go43 分钟前
泛微OA-E9与第三方系统集成开发企业级实战记录(八)
java·接口·金蝶·泛微·oa·集成开发·对接