学习目标
掌握Scanner类的使用
使用Scanner接收输入数据
Scanner类简介
在JDK1.5之后JAVA提供了专门的输入数据类,此类可以完成BufferedReader类的功能。也可以方便的对输入数据进行验证。此类存放在java.util工具包中。
1、public Scanner(File source) throws FileNotFoundException 构造方法 从文件中接收内容。
2、public Scanner(InputStream source) 构造方法 从指定的字节输入流中接收内容。
3、public boolean hasNext(Pattern pattern)普通方法 判断输入的数据是否符合指定的正则标准
4、public booean hasNextFloat() 普通方法 判断输入的是否是小数
5、public boolean hasNextInt() 普通方法 判断输入的是否是整数
6、public String next()普通 接收内容
7、public String next(Pattern pattern) 普通 接收内容,进行正则验证
8、public int nextInt() 普通 接收整数
9、public float nextFloat() 接收小数
10、public Scanner useDelimiter(String pattern) 普通 设置读取的分隔符
此类不在java.io包中,而在java.util包中,所以,此类是一个工具类
使用Scanner接收键盘的输入数据:
import java.util.* ;
public class ScannerDemo01{
public static void main(String args[]){
Scanner scan = new Scanner(System.in) ; // 从键盘接收数据
System.out.print("输入数据:") ;
String str = scan.next() ; // 接收数据
System.out.println("输入的数据为:" + str) ;
}
};
比直接使用BufferedReader更加方便。但是,以上输入数据代码实际上是存在问题的。
如果输入数据之间存在空格,则会以空格为分隔符。如下所示:
如果要想输入空格的话,就必须修改分隔符,将分隔符改为"\n",使用以下方法完成
public ScanneruseDelimiter(String pattern)
修改分隔符:
import java.util.* ;
public class ScannerDemo02{
public static void main(String args[]){
Scanner scan = new Scanner(System.in) ; // 从键盘接收数据
System.out.print("输入数据:") ;
scan.useDelimiter("\n") ;
String str = scan.next() ; // 接收数据
System.out.println("输入的数据为:" + str) ;
}
};
之前的输入数据都是以字符串的形式返回的,实际上使用Scanner类也可以方便的直接返回整数或者是小数。
有以下的方法:
(1)接收整数:
|- 判断是否是整数:public boolean hasNextInt() 判断是否是整数,如果是则返回true。
|-接收数据:public int nextInt()
(2) 接收小数
|- 判断是否是小数:public boolean hasNextFloat() 判断是否是小数,如果是则返回true。
|-接收数据:public float nextFloat()
import java.util.* ;
public class ScannerDemo03{
public static void main(String args[]){
Scanner scan = new Scanner(System.in) ; // 从键盘接收数据
int i = 0 ;
float f = 0.0f ;
System.out.print("输入整数:") ;
if(scan.hasNextInt()){ // 判断输入的是否是整数
i = scan.nextInt() ; // 接收整数
System.out.println("整数数据:" + i) ;
}else{
System.out.println("输入的不是整数!") ;
}
System.out.print("输入小数:") ;
if(scan.hasNextFloat()){ // 判断输入的是否是小数
f = scan.nextFloat() ; // 接收小数
System.out.println("小数数据:" + f) ;
}else{
System.out.println("输入的不是小数!") ;
}
}
};
Scanner这个类虽然可以接收各种类型,但是对于日期型的数据却无法接收。
如果要想接收Date类型的数据,则只能通过字符串转型,但是在接收的时候依然可以使用Scanner类中提供的方法进行验证:
验证:public String hasNext(Pattern pattern)
接收:public String next(String pattern)
还可以直接从文件中读取信息。
import java.util.* ;
import java.text.* ;
public class ScannerDemo04{
public static void main(String args[]){
Scanner scan = new Scanner(System.in) ; // 从键盘接收数据
String str = null ;
Date date = null ;
System.out.print("输入日期(yyyy-MM-dd):") ;
if(scan.hasNext("^\\d{4}-\\d{2}-\\d{2}$")){ // 判断
str = scan.next("^\\d{4}-\\d{2}-\\d{2}$") ; // 接收
try{
date = new SimpleDateFormat("yyyy-MM-dd").parse(str) ;
}catch(Exception e){}
}else{
System.out.println("输入的日期格式错误!") ;
}
System.out.println(date) ;
}
};
还可以直接从文件中读取信息。
假设:d:\test.txt文件
文件内容
使用Scanner直接读取文件的内容
import java.util.* ;
import java.text.* ;
import java.io.* ;
public class ScannerDemo05{
public static void main(String args[]){
File f = new File("D:" + File.separator + "test.txt") ; // 指定操作文件
Scanner scan = null ;
try{
scan = new Scanner(f) ; // 从键盘接收数据
}catch(Exception e){}
StringBuffer str = new StringBuffer() ;
while(scan.hasNext()){
str.append(scan.next()).append('\n') ; // 取数据
}
System.out.println("文件内容为:" + str) ;
}
};
在使用Scanner读取文件的时候,要考虑到换行的功能。
总结:
1、掌握Scanner类的作用:方便的读取数据。
2、在读取操作的时候一定要注意分隔符的影响。