Java学习总结:50(扫描流:Scanner)

扫描流:Scanner

Scanner类定义在java.util包中,所以此类是一个工具类,利用它可以方便地实现数据的输入操作。
Scanner实现了Iterator(迭代)接口与Closeable接口。
Scanner类中定义的常用方法如下:

No.方法类型描述
1public Scanner(InputStream source)构造接收InputStream输入流对象,此为输入源
2public boolean hasNext()普通判断是否有数据输入
3public String next()普通取出输入数据,以String形式返回
4public boolean hasNextXxx()普通判断是否有指定类型数据存在
5public 数据类型 nextXxx()普通取出指定类型的数据
6public Scanner useDelimiter(String pattern)普通设置读取的分隔符

例:利用Scanner实现键盘数据输入

package Project.Study.ScannerClass;

import java.util.Scanner;

public class Test1 {
    public static void main(String[]args){
        Scanner scanner = new Scanner(System.in);               //准备接收键盘输入数据
        System.out.println("请输入内容:");                       //提示信息
        if (scanner.hasNext()){                                 //是否有输入数据
            System.out.println("输入内容为:"+scanner.next());    //存在内容则输出
        }
        scanner.close();
    }
}
//结果:
//请输入内容:
//111213hahah
//输入内容为:111213hahah

例:判断输入的数据类型

package Project.Study.ScannerClass;

import java.util.Scanner;

public class Test2 {
    public static void main(String[]args){
        Scanner scanner = new Scanner(System.in);//准备接收键盘输入数据
        System.out.println("请输入成绩:");
        if (scanner.hasNextDouble()){            //表示输入的是一个小数
            double score = scanner.nextDouble();    //省略了转型
            System.out.println("成绩为:"+score);
        }else{                                  //表示输入的不是一个数字
            System.out.println("输入的不是数字");
        }
        scanner.close();
    }
}
//结果:
//请输入成绩:
//haha
//输入的不是数字
//请输入成绩:
//100
//成绩为:100.0

Scanner类中除了支持各种常用的数据类型外,也可以在输入数据时使用正则表达式来进行验证。

例:正则验证

package Project.Study.ScannerClass;

import java.util.Scanner;

public class Test3 {
    public static void main(String[]args){
        Scanner scanner = new Scanner(System.in);                   //准备接收键盘输入数据
        System.out.println("请输入生日:");
        if (scanner.hasNext("\\d{4}-\\d{1,2}-\\d{1,2}")){   //正则验证
            String str = scanner.next("\\d{4}-\\d{1,2}-\\d{1,2}");//接收数据
            System.out.println("生日为:"+str);
        }else{                                          //数据格式错误
            System.out.println("输入的生日格式错误!");
        }
        scanner.close();
    }
}
//结果:
//请输入生日:
//2020-4-27
//生日为:2020-4-27
//请输入生日:
//2020 4 27
//输入的生日格式错误!

在Scanner类的构造里面由于接收的是InputStream,所以依然可以设置一个文件的数据流。考虑到文件本身会存在多行内容,所以需要考虑读取的分隔符问题(默认是空格为分隔符,例如:空格或换行),这样在读取前就必须使用“useDelimiter()”方法来设置分隔符。

例:读取文件

package Project.Study.ScannerClass;

import java.io.File;
import java.io.FileInputStream;
import java.util.Scanner;

public class Test4 {
    public static void main(String[]args)throws Exception{
        Scanner scanner = new Scanner(new FileInputStream(new File("d:"+
                File.separator+"Test"+File.separator+"test.txt")));         //设置读取的文件输入流
        scanner.useDelimiter("\n");                                         //设置读取的分隔符
        while (scanner.hasNext()){                                          //循环读取
            System.out.println(scanner.next());                             //直接输出读取数据
        }
        scanner.close();
    }
}
//结果:
//Hello World!!!
//Hi!!!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值