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。

相关推荐
天河归来9 小时前
第三方接口不稳定,如何让核心任务继续完成
java·大数据
Knight_AL9 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
砚底藏山河10 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
猿究院_夏燊11 小时前
MySQL 的四种隔离级别
java·数据库·mysql
码流子11 小时前
移动收费怎么做?手持终端+App+收费中心的架构实践
java·开发语言·架构
霸道流氓气质12 小时前
AI 流式对话与实时聊天平台:SSE 解码竞态、有状态会话隔离与背压取消的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
云创智城-yuncitys12 小时前
YunParking 4.0:JDK 17 与 Spring Boot 3.2 的停车云升级
java·开发语言·spring boot
文丑颜不良啊12 小时前
LeetCode1661~1680题目解析
java·leetcode
子非鱼@Itfuture12 小时前
关于前后端联调中登录状态/登录信息失效?
java·前端
郭小李12 小时前
openFeign入门
java·开发语言·前端