博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IO Streams:扫描
阅读量:5272 次
发布时间:2019-06-14

本文共 2182 字,大约阅读时间需要 7 分钟。

简介

Scanner类被用于输入的格式化中断,并将其移到Tokens中,然后对其单个的Tokens根据其数据类型进行翻译。

从input——Tokens

默认情况下,一个Scanner使用 空格 键去区分Tokens(空格键包括:blanks,tabs,line terminators. 全部的键值,参考文档Character.isWhitespace) Scanning是怎么工作的呢,让我们一起分析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在扫描仪对象完成后调用扫描仪的关闭方法。 即使扫描仪不是流,您仍然需要关闭它,以表明您已完成其底层流。 ScanXan的输出看起来像这样:
In
Xanadu
did
Kubla
Khan
A
stately
pleasure-dome
...
要使用不同的Tokens分隔符,请调用useDelimiter(),指定正则表达式。 例如,假设您希望Tokens分隔符为逗号,可选地后跟空格。 你会调用:
s.useDelimiter(",\\s*");

翻译个体Tokens

ScanXan示例将所有输入Tokens视为简单的字符串值。 Scanner还支持所有Java语言的原始类型(char除外)以及BigInteger和BigDecimal的Tokens。 此外,数值可以使用数千个分隔符。 因此,在美国地区,扫描仪正确读取字符串“32,767”表示整数值。 我们必须提及区域设置,因为数千个分隔符和十进制符号是特定于区域设置的。 因此,如果我们没有指定扫描仪应该使用美国语言环境,以下示例将无法在所有语言环境中正常工作。 这是你不必担心的事情,因为您的输入数据通常来自使用相同语言环境的来源。 但这个例子是Java Tutorial的一部分,并且遍布世界各地。 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);    }}
这是简单的输入文件usnumbers.txt
8.5
32,767
3.14159
1,000,000.1
输出字符串为“1032778.74159”。 在某些区域设置中,该时间段将是一个不同的字符,因为System.out是一个PrintStream对象,该类不提供覆盖默认语言环境的方法。 我们可以覆盖整个程序的区域设置,或者我们只能使用格式化,如下一个主题格式化所述。

转载于:https://www.cnblogs.com/hhx626/p/8320411.html

你可能感兴趣的文章
poj3320 Jessica's Reading Problem(尺取思路+STL)
查看>>
分布式计算开源框架Hadoop介绍
查看>>
安卓平台接口剖析
查看>>
坏的事情不都会带来坏的结果
查看>>
RPC的基础:调研EOS插件http_plugin
查看>>
第二次团队冲刺第二天
查看>>
bzoj 2257 (JSOI 2009) 瓶子与燃料
查看>>
11)Java abstract class 和 interface
查看>>
使用xrdp或Xmanager 远程连接 CentOS6
查看>>
Linux误删恢复
查看>>
Unity调用Windows窗口句柄,选择文件和目录
查看>>
HashMap循环遍历方式
查看>>
React Native 入门 调试项目
查看>>
C# 通过 Quartz .NET 实现 schedule job 的处理
查看>>
关于java之socket输入流输出流可否放在不同的线程里进行处理
查看>>
目前为止用过的最好的Json互转工具类ConvertJson
查看>>
Day13
查看>>
tensorflow saver简介+Demo with linear-model
查看>>
Luogu_4103 [HEOI2014]大工程
查看>>
Oracle——SQL基础
查看>>