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

 

posted @ 2017-07-23 00:04  美好的明天  阅读(924)  评论(0编辑  收藏  举报