天天看点

JDK5中的控制台输入

Scanner类是JDK5新添加的一个类,主要作用是处理输入流、文件和文本内容等 。

这个类在java.util包里面,实现了Iterator接口,而且io处理采用了jdk1.4才发布的nio。

由于这个类实现了Iterator接口,如果全部是string的话,就可以采用next(),hasnext()来进行迭代,就像是迭代一个字符串集合一样。如果处理的内容不是string的话,这个类也提供了nextXXX(),hasNextXXX()方法,处理十分方便。

下面分别讲一下怎么处理输入流、文件和文本

1.输入流处理:

/** 输入流demo */

public static void inputStreamDemo() {

    System.out.println("please input int & double:");

    Scanner cin = new Scanner(System.in);

    int inputInt = cin.nextInt();

    double inputDouble = cin.nextDouble();

    System.out.printf("inputInt:%d\n", inputInt);

    System.out.printf("inputDouble:%f\n\n", inputDouble);

}

首先声明Scanner cin = new Scanner(System.in);,然后调用Scanner的nextInt和nextDouble接受来自控制台输入的int和double。

2.文件处理:

/** 文件demo */

public static void fileDemo() throws Exception{

    System.out.println("fileDemo:");

    Scanner cin = new Scanner(new File("scannerDemo"));

    while(cin.hasNextLine()){

     System.out.println(cin.nextLine());

    }

    cin.close();

    System.out.println();

如果是文件输入流的话,就不用取得一个输入流的,只需要新建一个file传入Scanner的构造参数就行了。hasNextLine和nextLine方法可以发现和Iterator的函数相当类似。

注意如果处理文件的话,处理完毕一定要关闭文件。如果需要处理一个文件的话,用这个类不止代码上复杂度有所减少,而且采用了nio,所以性能上也有保证。

3.文本处理

/** string demo*/

public static void stringDemo() {

    System.out.println("stringDemo:");

    String str="10 9 stringDemo 9.8";

    Scanner cin = new Scanner(str);

    System.out.println("inputInt:"+cin.nextInt());

    System.out.println("inputString:"+cin.next());

    System.out.println("inputDouble:"+cin.nextDouble());

这个用法和输入流的基本类似,区别就是构造函数而已。

继续阅读