一、Scanner 类简介
Scanner 类的常用方法:
Scanner 类提供了一个可以接收 InputStream 类型的构造方法,这就表示只要是字节输入流的子类都可以通过 Scanner 类进行方便的读取
二、使用 Scanner 类输入数据
1. 实现基本的数据输入
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);//从键盘接收数据
System.out.print("输入数据:");
String str = scan.next();
System.out.println("输入的数据为:" + str);
}
}
程序中输入流带有空格的内容,结果只是取出来空格之前的内容,因为 Scanner 将空格当做了一个分隔符,为了保证程序的正确,将分隔符号修改为“\n(回车)”
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);//从键盘接收数据
scan.useDelimiter("\n");//修改输入数据的分隔符
System.out.print("输入数据:");
String str = scan.next();
System.out.println("输入的数据为:" + str);
}
}
- 11
如果要输入 int 或 float 类型的数据,Scanner 类也支持,但是在输入之前最好先使用 hasNextXxx()
方法验证
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);//从键盘接收数据
int i=0;
float j=0;
System.out.print("输入整数:");
if (scan.hasNextInt()) {//判断输入的是否是整数
i = scan.nextInt();//接收整数
System.out.println("整数数据:" + i);
}
System.out.print("输入小数:");
if (scan.hasNextFloat()) {//判断输入的是否是小数
j = scan.nextFloat();//接收小数
System.out.println("小数数据:" + j);
}
}
}
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
2. 实现日期格式的数据输入
在 Scanner 了中没有专门的日期格式输入操作,因此需要自己编写验证,手动转换。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
System.out.print("输入日期(yyyy-MM-dd):");
String str = null;
Date date = null;
if (scn.hasNext("^\\d{4}-\\d{2}-\\d{2}$")) {//判读输入格式是否是日期
//接收日期格式的字符串转换成日期
str = scn.next("^\\d{4}-\\d{2}-\\d{2}$");
try{
date = new SimpleDateFormat("yyyy-MM-dd").parse(str);
}catch (ParseException e){
e.printStackTrace();
}
}else {
System.out.println("输入的日期格式错误!");
}
System.out.println(date);
}
}
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
3. 从文件中得到数据
如果要从文件中取得数据,则直接将 File 类的实例传入到 Scanner 的构造方法中。
比如现在这里想要读取 test.txt 文件
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Root{
public static void main(String[] args) {
File f = new File("D:" + File.separator + "test.txt");
Scanner scan = null;
try {
scan = new Scanner(f);//从文件接收数据
scan.useDelimiter("\n");//注意这里同样要修改分隔符
}catch (FileNotFoundException e){
e.printStackTrace();
}
StringBuffer str = new StringBuffer();//用于接收数据
while (scan.hasNext()){//判读是否还有内容
str.append(scan.next()).append("\n");//取出内容
}
System.out.println(str);
}
}
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
这里需要注意 Scanner 含有默认的分隔符,需要将其分隔符自定义,达到一次读取一行的目标,然后读取一行后为其添加换行符