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("inputInt:"+cin.nextInt());
System.out.println("inputString:"+cin.next());
System.out.println("inputDouble:"+cin.nextDouble());
}
这个用法和输入流的基本类似,区别就是构造函数而已。