1、掌握Scanner 类的作用
2、使用Scanner 接收输入数据
此类不在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 Scanner useDelimiter(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 类也可以方便的直接返回整数或者小数。
有以下的方法:
接收整数
|- 判断是否是整数: public booleanhasNextInt(),判断是否是整数,如果是则返回true
|-接收数据 :public intnextInt()
接收小数
|-判断是否是小数:public booleanhasNextFloat()
|- 接收数据: public floatnextFloat()
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("输入的不是小数!") ; } } };Scnaner 这个类虽然可以接收各种类型,但是对于日期型的数据却无法接收。
如果要想接收Date 类型的数据,则只能通过字符串转型,但是在接收的时候依然可以使用Scanner 类中提供的方法进行验证:
验证:public boolean hasNext(Pattern pattern)
接收: public String next(Pattern 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}{1}quot;)){ // 判断 str = scan.next("^\\d{4}-\\d{2}-\\d{2}{1}quot;) ; // 接收 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){} String str = null ; if(scan.hasNext()){ str = scan.next(); // 取数据 } System.out.println("文件内容为:" + str) ; } };现在的文件内容确实读取进来,但是此程序依然不完美。以上只能读取出第一行数据,因为存在换行,所以认为读完了。
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、在读取操作的时候一定要注意分隔符的影响