java中Scanner

来源:互联网 发布:.cn域名可以过户吗? 编辑:程序博客网 时间:2024/06/06 09:40

java.util.Scanner是Java5的新特征,主要功能是简化文本扫描。这个类最实用的地方表现在获取控制台输入,对文本进行操作。

一、扫描控制台输入

当通过new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。如果要获取输入的内容,则只需要调用Scanner的nextLine()方法即可。

先上代码如下:

import java.io.File;import java.io.FileNotFoundException;import java.util.Scanner;public class Main {    public static void main(String[] args) {        //从控制台获取字符串        //Scanner scanner = new Scanner(System.in);        /*System.out.println("请输入字符串:");        while(true){            String line = scanner.nextLine();            if(line.equals("exit")) break;            System.out.println(">>"+line);        }*/        //使用分隔符        //Scanner scanner = new Scanner("123 asdf sd 45 789 sdf asdfl,sdf.sdfl,asdf    ......asdfkl    las");        /*  while(scanner.hasNext()){            scanner.useDelimiter(" |,|\\.");            System.out.println(scanner.next());        }*/        //测试文本输入        Scanner scanner = null;        try {            scanner = new Scanner(new File("D:\\Workspaces\\Java\\algorithm\\Offer_7.java"));        } catch (FileNotFoundException e) {            e.printStackTrace();        }        while(scanner.hasNextLine()){             System.out.println(scanner.nextLine());        }        scanner.close();    }}

运行结果如下:

请输入字符串: aaa>>234 string>>string 567 >>567 exit 

二、Scanner的构造器支持多种方式,构建Scanner的对象很方便。

可以从字符串(Readable)、输入流、文件等等来直接构建Scanner对象,有了Scanner了,就可以逐段(根据正则分隔式)来扫描整个文本,并对扫描后的结果做想要的处理。

三、Scanner默认使用空格作为分割符来分隔文本,但允许你指定新的分隔符

四、一大堆API函数,相对实用的有如下几个

函数 备注 delimiter() 返回此 Scanner 当前正在用于匹配分隔符的 Pattern。 hasNext() 判断扫描器中当前扫描位置后是否还存在下一段。(原APIDoc的注释很扯淡) hasNextLine() 如果在此扫描器的输入中存在另一行,则返回 true。 next() 查找并返回来自此扫描器的下一个完整标记。 nextLine() 此扫描器执行当前行,并返回跳过的输入信息。

五、逐行扫描文件,并逐行输出

文本文件如下:

老赵,28,feb-01,true小竹,22,dec-03,false阿波,21,dec-03,false凯子,25,dec-03,true

import java.io.File;import java.io.FileNotFoundException;import java.util.Scanner;public class Main {    private static void readfile(String filename) {        try {            Scanner scanner = new Scanner(new File(filename));            scanner.useDelimiter(System.getProperty("line.separator"));            while (scanner.hasNext()) {                parseline(scanner.next());            }            scanner.close();        } catch (FileNotFoundException e) {            System.out.println(e);        }    }    private static void parseline(String line) {        Scanner linescanner = new Scanner(line);        linescanner.useDelimiter(",");        // 可以修改usedelimiter参数以读取不同分隔符分隔的内容        String name = linescanner.next();        int age = linescanner.nextInt();        String idate = linescanner.next();        boolean iscertified = linescanner.nextBoolean();        System.out.println("姓名:" + name + " ,年龄:" + age + " ,入司时间:" + idate + " ,验证标记:" + iscertified);    }    public static void main(String[] args) {        if (args.length != 1) {            System.err.println("usage: java readhuman file location");            System.exit(0);        }        readfile(args[0]);    }}
1 0