Java的Scanner类(Java基础复习归纳系列)

   参考资料:Java doc、THU 谌卫军老师的教学PPT

Scanner类

        作用:一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器可以方便地对文本文件中的每一个不同类型的数据单元进行访问;

        Scanner 使用分隔符模式将其输入分解为一个个标记(token),默认情况下该分隔符模式与空格(whitespace)匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

        构造方法

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

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

Scanner(String source)

构造一个新的Scanner,它生成的值是从指定字符串扫描的。

        常用方法

boolean

hasNext() 
    如果此扫描器的输入中有另一个标记,则返回 true。

此扫描器不执行任何输入

boolean

hasNextLine() 
    如果在此扫描器的输入中存在另一行,则返回 true。

boolean

nextBoolean() 
      扫描解释为一个布尔值的输入标记并返回该值。

 byte

nextByte() 
    将输入信息的下一个标记扫描为一个 byte。

若文件已结束,则抛出NoSuchElementException;

 

若类型不一致,则抛出InputMismatchException

 

 

 

 

 

 

 double

nextDouble() 
    将输入信息的下一个标记扫描为一个 double。

 int

nextInt() 
    将输入信息的下一个标记扫描为一个 int。

 String

nextLine() 
    此扫描器执行当前行,并返回跳过的输入信息。

void

close() 
    关闭此扫描器。在扫描器关闭后执行搜索操作将导致 IllegalStateException

        读取下一个数据单元的前提是该单元存在,所以在读取数据单元之前,需要先判断其是否存在:

boolean hasNext();

boolean hasNextInt();

boolean hasNextDouble();

boolean hasNextBoolean();

boolean hasNextLine();

        例1:访问weather.txt文件,计算所有气温的平均值

import java.io.*; // for File
import java.util.*; // for Scanner

public class TestScanner1 {
	public static void main(String[] args) throws FileNotFoundException {
		Scanner input = new Scanner(new File("D:\\weather.txt"));
		int num = 0;
		double sum = 0;
		System.out.print("读入的气温值:");
		while (input.hasNext()) {
			if (input.hasNextDouble()) {
				Double temp = input.nextDouble();
				sum += temp;
				System.out.print(temp + "\t");
				num++;
			} else
				input.next();
		}
		input.close();
		System.out.println("\nAverage: " + sum / num);
	}
}

运行结果:

 

例2:访问文件hours.txt计算每个人的工作时间

按照以下格式输出:

此题中,一行代表一个人的数据,要求每个人的工作时间需要逐行读取,并对每一行的数据按固定的“ID+姓名+时间”的格式进行分解。

import java.io.*;    // for File
import java.util.*;  // for Scanner
public class TestScanner2 {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner input = new Scanner(new File("D:\\hours.txt"));
        while (input.hasNextLine()) {
            String line = input.nextLine();
            processEmployee(line);
        }
    }

    public static void processEmployee(String line) {
        Scanner lineScan = new Scanner(line);
        int id = lineScan.nextInt();          // e.g. 456
        String name = lineScan.next();        // e.g. "Greg"
        double sum = 0.0;
        int count = 0;
        while (lineScan.hasNextDouble()) {
            sum = sum + lineScan.nextDouble();
            count++;
        }
        double average = sum / count;
        System.out.println(name + " (ID#" + id + ") worked " +
            sum + " hours (" + average + " hours/day)");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值