Java IO编程: Scanner类
程序员文章站
2024-01-18 20:46:22
...
打印流解决的是OutputStream的缺陷, BufferedReader解决的是InputStream的缺陷, 而java.util.Scanner解决的是BufferedReader类的缺陷(替换了 BufferedReader类)
Scanner类 是一个专门进行输入流处理的程序类, 利用这个类可以方便的处理各种数据类型, 同时也可以结合正则表达式进行各项处理, 在这个类中主要关注以下的方法:
- 判断是否有指定类型的数据: public boolean hasNextXxx()
- 取得指定类型: public 数据 nextXxx()
- 定义分隔符: public Scanner useDelimiter(String pattern)
- 构造方法: public Scanner(InputStream source)
案例: 使用Scanner 实现数据的输入
package com.cwq.beyond;
import java.util.Scanner;
public class TestDemo02 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println(" 请输入数据: ");
if (sc.hasNext()) { // 现在有输入内容, 不判断空字符串
System.out.println("[输入内容为]: "+ sc.next());
}
sc.close();
}
}
Scanner 还可以接收各种数据类型, 并且帮助用户减少转型的处理。
案例: 接收其他数据类型的数据
package com.cwq.beyond;
import java.util.Scanner;
public class TestDemo02 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println(" 请输入年龄: ");
if (sc.hasNextInt()) { // 现在有输入内容, 不判断空字符串
System.out.println("[输入内容为]: "+ sc.nextInt());
}else
System.out.println("格式有误~");
sc.close();
}
}
最为重要的是, Scanner可以对接收的数据类型使用正则表达式进行判断
案例: 利用正则进行判断
package com.cwq.beyond;
import java.util.Scanner;
public class TestDemo02 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println(" 请输入生日: ");
if (sc.hasNext("\\d{4}-\\d{2}-\\d{2}")) { // 现在有输入内容, 不判断空字符串
System.out.println("[输入内容为]: "+ sc.next());
}else
System.out.println("格式有误~");
sc.close();
}
}
但是以上的操作在开发之中不会出现, 因为不可能让你编写一个命令行程序进行数据的输入操作
使用Scanner本身能够接收的是一个InputStream 类的对象, 那么也就意味着可以接收任何的输入流, 例如: 文件输入流
package com.cwq.beyond;
import java.io.File;
import java.io.FileInputStream;
import java.util.Scanner;
public class TestDemo02 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(new FileInputStream(new File("D:"+File.separator+"data.txt")));
sc.useDelimiter("\n"); // 自定义分割符
while (sc.hasNext()) {
System.out.println(sc.next());
}
}
}
Scanner 实际上完美的替代了 BufferedReader, 而且更好的实现了 InputStream的操作, 因此以后除了二进制的文件拷贝之外, 那么只要针对于程序的信息输出都使用打印流, 信息的输入都使用Scanner 扫描流。