Scanning

Scanner类型的对象可用于将格式化的 Importing 分解为令牌,并根据其数据类型转换单个令牌。

将 Importing 分为令牌

默认情况下,扫描仪使用空格分隔令牌。 (空格字符包括空格,制表符和行终止符.有关完整列表,请参阅Character.isWhitespace的文档。)要查看扫描的工作方式,让我们看一下ScanXan,该程序读取xanadu.txt中的各个单词并打印出来。 ,每行一个。

import java.io.*;
import java.util.Scanner;

public class ScanXan {
    public static void main(String[] args) throws IOException {

        Scanner s = null;

        try {
            s = new Scanner(new BufferedReader(new FileReader("xanadu.txt")));

            while (s.hasNext()) {
                System.out.println(s.next());
            }
        } finally {
            if (s != null) {
                s.close();
            }
        }
    }
}

请注意,使用扫描程序对象完成ScanXan会调用Scannerclose方法。即使扫描程序不是流,您也需要关闭它以表明已完成其基础流。

ScanXan的输出如下所示:

In
Xanadu
did
Kubla
Khan
A
stately
pleasure-dome
...

要使用其他令牌分隔符,请调用useDelimiter(),并指定一个正则表达式。例如,假设您希望令牌分隔符是逗号,并且可以选择后面跟空格。您会调用,

s.useDelimiter(",\\s*");

转换单个令牌

ScanXan示例将所有 Importing 令牌视为简单String值。 Scanner还支持所有 Java 语言原始类型(char除外)以及BigIntegerBigDecimal的标记。此外,数值可以使用数千个分隔符。因此,在US语言环境中,Scanner正确读取表示整数值的字符串“ 32,767”。

我们必须提到语言环境,因为数千个分隔符和十进制符号是特定于语言环境的。因此,如果我们未指定扫描程序应使用US语言环境,则以下示例在所有语言环境中均无法正常工作。通常不必担心,因为您的 Importing 数据通常来自与您使用相同语言环境的源。但是此示例是 Java 教程的一部分,并在全世界范围内分发。

ScanSum示例读取double个值的列表并将它们加起来。来源:

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.Locale;

public class ScanSum {
    public static void main(String[] args) throws IOException {

        Scanner s = null;
        double sum = 0;

        try {
            s = new Scanner(new BufferedReader(new FileReader("usnumbers.txt")));
            s.useLocale(Locale.US);

            while (s.hasNext()) {
                if (s.hasNextDouble()) {
                    sum += s.nextDouble();
                } else {
                    s.next();
                }   
            }
        } finally {
            s.close();
        }

        System.out.println(sum);
    }
}

这是示例 Importing 文件usnumbers.txt

8.5
32,767
3.14159
1,000,000.1

输出字符串 为“ 1032778.74159”。在某些语言环境中,句点将是一个不同的字符,因为System.outPrintStream对象,并且该类没有提供重写默认语言环境的方法。我们可以覆盖整个程序的语言环境,也可以只使用格式设置,如下一个主题Formatting所述。