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。