扫描流:Scanner
Scanner类定义在java.util包中,所以此类是一个工具类,利用它可以方便地实现数据的输入操作。
Scanner实现了Iterator(迭代)接口与Closeable接口。
Scanner类中定义的常用方法如下:
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public Scanner(InputStream source) | 构造 | 接收InputStream输入流对象,此为输入源 |
2 | public boolean hasNext() | 普通 | 判断是否有数据输入 |
3 | public String next() | 普通 | 取出输入数据,以String形式返回 |
4 | public boolean hasNextXxx() | 普通 | 判断是否有指定类型数据存在 |
5 | public 数据类型 nextXxx() | 普通 | 取出指定类型的数据 |
6 | public Scanner useDelimiter(String pattern) | 普通 | 设置读取的分隔符 |
例:利用Scanner实现键盘数据输入
package Project.Study.ScannerClass;
import java.util.Scanner;
public class Test1 {
public static void main(String[]args){
Scanner scanner = new Scanner(System.in); //准备接收键盘输入数据
System.out.println("请输入内容:"); //提示信息
if (scanner.hasNext()){ //是否有输入数据
System.out.println("输入内容为:"+scanner.next()); //存在内容则输出
}
scanner.close();
}
}
//结果:
//请输入内容:
//111213hahah
//输入内容为:111213hahah
例:判断输入的数据类型
package Project.Study.ScannerClass;
import java.util.Scanner;
public class Test2 {
public static void main(String[]args){
Scanner scanner = new Scanner(System.in);//准备接收键盘输入数据
System.out.println("请输入成绩:");
if (scanner.hasNextDouble()){ //表示输入的是一个小数
double score = scanner.nextDouble(); //省略了转型
System.out.println("成绩为:"+score);
}else{ //表示输入的不是一个数字
System.out.println("输入的不是数字");
}
scanner.close();
}
}
//结果:
//请输入成绩:
//haha
//输入的不是数字
//请输入成绩:
//100
//成绩为:100.0
Scanner类中除了支持各种常用的数据类型外,也可以在输入数据时使用正则表达式来进行验证。
例:正则验证
package Project.Study.ScannerClass;
import java.util.Scanner;
public class Test3 {
public static void main(String[]args){
Scanner scanner = new Scanner(System.in); //准备接收键盘输入数据
System.out.println("请输入生日:");
if (scanner.hasNext("\\d{4}-\\d{1,2}-\\d{1,2}")){ //正则验证
String str = scanner.next("\\d{4}-\\d{1,2}-\\d{1,2}");//接收数据
System.out.println("生日为:"+str);
}else{ //数据格式错误
System.out.println("输入的生日格式错误!");
}
scanner.close();
}
}
//结果:
//请输入生日:
//2020-4-27
//生日为:2020-4-27
//请输入生日:
//2020 4 27
//输入的生日格式错误!
在Scanner类的构造里面由于接收的是InputStream,所以依然可以设置一个文件的数据流。考虑到文件本身会存在多行内容,所以需要考虑读取的分隔符问题(默认是空格为分隔符,例如:空格或换行),这样在读取前就必须使用“useDelimiter()”方法来设置分隔符。
例:读取文件
package Project.Study.ScannerClass;
import java.io.File;
import java.io.FileInputStream;
import java.util.Scanner;
public class Test4 {
public static void main(String[]args)throws Exception{
Scanner scanner = new Scanner(new FileInputStream(new File("d:"+
File.separator+"Test"+File.separator+"test.txt"))); //设置读取的文件输入流
scanner.useDelimiter("\n"); //设置读取的分隔符
while (scanner.hasNext()){ //循环读取
System.out.println(scanner.next()); //直接输出读取数据
}
scanner.close();
}
}
//结果:
//Hello World!!!
//Hi!!!