JAVA IO:Scanner类
使用Scanner类接收输入数据。
JAVA提供了专门的输入数据类,此类可以完成BufferedReader类的功能,也可以方便的对输入数据进行验证,此类存放于JAVA.UTILL包中。
常用方法如下:
此类不在java.io中,而在java.utill类,所以此类是一个工具类。
1,使用Scanner接收键盘输入数据
package 类集; 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) ; } };
运行结果:
输入数据:2123
输入的数据为:2123
比直接使用BufferedReader类方便,但是以上程序还是存在问题。
如果输入数据之间存在空格,会以空格为分隔符。如果要想输入空格,则必须修改分隔符,将分隔符变成"\n"。
Pattern delimiter() 返回此 Scanner 当前正在用于匹配分隔符的 Pattern。
修改分隔符:
package 类集; import java.util.* ; public class ScannerDemo01{ 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) ; } };
输入结果:
输入数据:3243 423423 43242
输入的数据为:3243 423423 43242
之前输入都是以字符串形式返回,实际上也可以使用Scanner方便返回整数或者小数。
有以下方法:
接收整数:
1,判断是否是整数,如果是,返回true:hasNextInt()。
2,public int getInt();
接收小数:
1,判断是否小数,:hasNextFloat()
2,public float getFloat()
package 类集; import java.util.* ; public class ScannerDemo01{ 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("输入的不是小数!") ; } } };
运行结果:
输入整数:32 整数数据:32 输入小数:12312 小数数据:12312.0
处理日期类型
Scanner类虽然可以接受各种类型,但是对于日期型却无法接收!
如果要想接收Data类型的数据,只能通过字符串转型,但是接收的时候依然可以使用Scanner类中提供的方法验证:
验证:public String hasnext(Pattern pattern)
接收:public String netxt(Pattern pattern)
package 类集; import java.text.SimpleDateFormat; import java.util.* ; public class ScannerDemo01{ 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) ; } };
运行结果:
输入日期(yyyy-MM-dd):2032-90-90
Mon Aug 29 00:00:00 CST 2039
还可以直接从文件中读取信息。
package 类集; import java.io.File; import java.text.SimpleDateFormat; import java.util.* ; public class ScannerDemo01{ 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) ; } };
运行结果:
文件中内容如下:
实际读取结果:(因为他默认以空格为分隔符)
文件内容为:321312312312 43 3432