本帖最后由 dadai5ai 于 2015-7-30 10:59 编辑
在JDK 1.5之后增加了一个新的类:java.util.Scanner类,此类专门负责处理输入数据的操作,此类的处理要比BufferedReader更加简单,那么在这个类之中主要关心如下几个方法: · 构造方法:public Scanner(InputStream source); · 设置读取分割符:public Scanner useDelimiter(String pattern); · 判断是否有数据:public boolean hasNextXxx(); · 取数据:public 数据 nextXxx()。 范例:利用Scanner实现键盘输入 package cn.mldn.demo; import java.util.Scanner; public class TestDemo { public static void main(String[] args) throws Exception { Scanner scan = new Scanner(System.in) ; scan.useDelimiter("\n") ; System.out.print("请输入信息:"); if (scan.hasNext()) { // 有数据 String data = scan.next() ; System.out.println(data); } scan.close() ; } } |
范例:输入整型数据,直接提供有数据判断 package cn.mldn.demo; import java.util.Scanner; public class TestDemo { public static void main(String[] args) throws Exception { Scanner scan = new Scanner(System.in) ; System.out.print("请输入年龄:"); if (scan.hasNextInt()) { // 输入的是int型数据 System.out.println(scan.next()); } else { System.out.println("输入的数据有错误!"); } scan.close() ; } } |
范例:输入日期,只能够自己编写正则验证,自己转型 package cn.mldn.demo; import java.text.SimpleDateFormat; import java.util.Scanner; public class TestDemo { public static void main(String[] args) throws Exception { Scanner scan = new Scanner(System.in) ; System.out.print("请输入生日:"); if (scan.hasNext("\\d{4}-\\d{2}-\\d{2}")) { // 输入的是int型数据 System.out.println(new SimpleDateFormat("yyyy-mm-dd").parse(scan .next())); } else { System.out.println("输入的数据有错误!"); } scan.close() ; } } |
以上的操作除了中间的判断和接收数据有用之外,其它的代码意义不大,那么下面使用Scanner实现一个文件数据的读取操作。 范例:读取文件 package cn.mldn.demo; import java.io.File; import java.io.FileInputStream; import java.util.Scanner; public class TestDemo { public static void main(String[] args) throws Exception { Scanner scan = new Scanner(new FileInputStream(new File("D:" + File.separator + "my.txt"))); scan.useDelimiter("\n") ; while (scan.hasNext()) { System.out.println(scan.next()); } scan.close() ; } } |
结论:第八个代码模型 · 如果由程序输出内容那么使用打印流(PrintStream或PrintWriter); · 如果程序输入数据使用Scanner(如果有时候Scanner不好使的时候使用BufferedReader)。
|