Scanner类既是一个用于扫描输入文本的实用程序,也是使用正则表达式来分析基本类型和字符串的简单文本扫描器。除了能使用正则表达式之外,Scanner类还可以任意的对字符串和基本类型的数据进行分析。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;
/**
* Scanner类
* @author lzq
*
*/
public class TestDemo5 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//gain(scan);
//gain1(scan);
//gain2(scan);
File file = new File("D:\\lzq/java.txt");
gain(file);
}
/**
* 从键盘获取数据
* @param scan
*/
private static void gain(Scanner scan) {
int num = 0;
float f = 0.0F;
System.out.println("请输入int型整数:");
if(scan.hasNextInt()) { //判断输出的数据是否为int型
num = scan.nextInt(); //输入int型数据
}else {
System.out.println("输入的不是int型整数");
System.exit(0); //退出程序
}
System.out.println("请输入float型小数:");
if(scan.hasNextFloat()) { //判断输出的是否为float型数据
f = scan.nextFloat(); //输入float型数据
}else {
System.out.println("输入的不是float小数");
System.exit(0); //退出程序
}
System.out.println("请输入字符串:");
String str = scan.next(); //输入字符串
System.out.println("整数:"+num+"\n小数:"+f+"\n字符串"+str);
}
/**
* 在使用nextXxx()方法时,最好先验证,否则容易产生异常,若输入的字符串中间含有空格,
* 那么空格之后的数据就没有了。可以使用useDelimiter()将分隔符修改为换行符"\n"
* @param scan
*/
private static void gain1(Scanner scan) {
scan.useDelimiter("\n"); //屏蔽了这句代码的话,若输入的字符串中间含有空格,那么空格之后的数据就没有了
System.out.println("请输入字符串");
String str = scan.next();
System.out.println(str);
}
/**
* 使用正则表达式验证输入的数据
* @param scan
*/
private static void gain2(Scanner scan) {
String pattern = "^[a-zA-Z0-9_\\.]+@[a-zA-Z0-9-]+[\\.a-zA-Z]+$";//定义正则表达式
System.out.println("请输入邮箱地址:");
String mail = null;
if(scan.hasNext(pattern)) { //判断输入格式是否正确
mail = scan.next();
System.out.println("你输入的邮箱是:"+mail);
}else {
System.out.println("你输入的邮箱不正确");
}
}
/**
* 从文件中获取数据
* @param file
*/
private static void gain(File file) {
if(!(file.exists())) { //判断文件是否存在
System.out.println("文件不存在:");
System.exit(0);
}
FileInputStream fis = null;
Scanner scan = null;
try {
fis = new FileInputStream(file);
scan = new Scanner(fis);
}catch(IOException e) {
e.printStackTrace();
}
StringBuffer sbu = new StringBuffer(); //定义StringBuffer类
while(scan.hasNext()) { //判断是否还有内容
sbu.append(scan.next()).append("\n"); //读取内容
}
System.out.println(sbu); //输出读取的数据
}
}
各个方法运行结果:
gain(scan)
请输入int型整数:
25
请输入float型小数:
0.324
请输入字符串:
lzq
整数:25
小数:0.324
字符串lzq
gain1(scan)
屏蔽scan.useDelimiter(“\n”);
请输入字符串
zhhuc ncubs jsc67
zhhuc
不屏蔽scan.useDelimiter(“\n”);
请输入字符串
lzjzgg xcb
lzjzgg xcb
gain2(sacn)
请输入邮箱地址:
2899349953@qq.com
你输入的邮箱是:2899349953@qq.com
gain(file);
锲而舍之
朽木不折
锲而不舍
金石可镂