三十,Scanner类

1.Scanner类介绍

Java 5添加了java.util.Scanner,这是一个用于扫描输入文本的新的实用程序.它是以前的StringTokenizerMatcher类之间的某种结合.由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分.于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法.这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(intdouble)的数据进行分析.借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器.

ScannerSDK1.5新增的一个类,可使用该类创建一个对象.Scanner类主要用来完成输入流的输入操作.

Scanner reader=new Scanner(System.in);

常用构造方法:

  • Scanner(File source) //构造一个新的Scanner,它生成的值是从指定文件扫描的

  • Scanner(InputStream source) //构造一个新的 Scanner,它生成的值是从指定的输入流扫描的

  • Scanner(String source) //构造一个新的Scanner,它生成的值是从指定字符串扫描的.

然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型:

next.Byte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShot()

上述方法执行时都会造成堵塞,等待用户在命令行输入数据回车确认.例如,拥护在键盘输入.

2.Scanner类应用

2.1获取键盘输入

示例:

package com.ares.test;
import java.util.*;
public class ScannerDemo {
	public static void main(String args[]) {
		System.out.println("请输入若干个数,每输入一个数用回车确认");
		System.out.println("最后输入一个非数字结束输入操作");
		Scanner reader = new Scanner(System.in);
		double sum = 0;
		int m = 0;
		while (reader.hasNextDouble()) {
			double x = reader.nextDouble();
			m = m + 1;
			sum = sum + x;
		}
		System.out.printf("%d个数的和为%f\n", m, sum);
		System.out.printf("%d个数的平均值是%f\n", m, sum / m);
	}
}

scan.hasNext()方法可以接收String类型数据, hasNextxxx方法可以用正则匹配.

2.2 输入的正则匹配

示例:

if (scan.hasNext("\\d{4}-\\d{2}-\\d{2}")) {

    str = scan.next();

}

输入流也可以是文件.


2.3 文件作为输入流

示例:

package com.ares.scannerdemo;
import java.io.File;
import java.io.FileInputStream;
import java.util.Scanner;
public class ScannerDemo {

	public static void main(String[] args) throws Exception {
		File file = new File("D:" + File.separator + "demo.txt");
		Scanner scan = new Scanner(new FileInputStream(file));
		StringBuffer buf = new StringBuffer();
		scan.useDelimiter("\n") ;
   //Sets this scanner's delimiting pattern
		while (scan.hasNext()) {
			buf.append(scan.next()).append("\n");
		}
		System.out.println("str = " + buf);
	}
}




20150507


JAVA学习笔记系列

--------------------------------------------

                    联系方式

--------------------------------------------

        Weibo: ARESXIONG

        E-Mail: [email protected]

------------------------------------------------




你可能感兴趣的:(Scanner类)