资讯专栏INFORMATION COLUMN

Java™ 教程(扫描)

dantezhao / 1777人阅读

扫描

编程I/O通常涉及转换人们喜欢使用的整齐格式的数据,为了帮助你完成这些工作,Java平台提供了两个API,扫描器API将输入分解为与数据位相关联的单个标记,格式化API将数据组装成格式良好、可读的形式。

Scanner类型的对象对于将格式化输入分解为标记并根据其数据类型转换单个标记非常有用。

将输入分解为标记

默认情况下,扫描器使用空格分隔标记(空格字符包括空格、制表符和行终止符,有关完整列表,请参阅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示例将所有输入标记视为简单的String值,Scanner还支持所有Java语言的原始类型(char除外)的标记,以及BigIntegerBigDecimal,此外,数值可以使用数千个分隔符。因此,在美国语言环境中,Scanner将字符串“32,767”正确地读取为一个整数值。

我们必须提到语言环境,因为千位分隔符和小数符号是特定于语言环境的,因此,如果我们未指定扫描器应使用美国语言环境,则以下示例将无法在所有语言环境中正常运行。这通常不必担心,因为你的输入数据通常来自使用相同语言环境的源,但是这个例子是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);
    }
}

这是示例输入文件usnumbers.txt。

8.5
32,767
3.14159
1,000,000.1

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

上一篇:缓冲流 下一篇:格式化流

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72964.html

相关文章

  • Spring Boot 2.x基础教程:工程结构推荐

    摘要:典型示例以下结构是比较推荐的组织方式,所有的类和其他都在之下。应用主类,该类直接位于下。默认情况下,的应用主类会自动扫描以及所有子包下的所有类来进行初始化。 Spring Boot框架本身并没有对工程结构有特别的要求,但是按照最佳实践的工程结构可以帮助我们减少可能会遇见的坑,尤其是Spring包扫描机制的存在,如果您使用最佳实践的工程结构,可以免去不少特殊的配置工作。 典型示例 以下结...

    CollinPeng 评论0 收藏0
  • Java零基础入门笔记|原来学Java可以这么简单

    摘要:刚开始学习的时候,可能是一头雾水,不知道从何学起。这个教程总体来说就像列文虎克教学,细到极致,妙到毫巅。适合绝对零基础的,每个知识点掰开了揉碎了讲解。 刚开始学习java的时候,可能是一头雾水,不知道从何学起。还有很多Java小白,在刚自学Java的时候玩命的学习,玩命的记住Java原理,天天早上五点起床背Java的一些英...

    2bdenny 评论0 收藏0
  • 通过Web安全工具Burp suite找出网站中的XSS漏洞实战(二)

    摘要:一背景笔者月份在慕课网录制视频教程跨站漏洞加强安全里面需要讲到很多实战案例,在漏洞挖掘案例中分为了手工挖掘工具挖掘代码审计三部分内容手工挖掘篇参考地址为快速找出网站中可能存在的漏洞实践一本文主要记录利用安全工具进行漏洞挖掘部分,分为了设置代 一、背景 笔者6月份在慕课网录制视频教程XSS跨站漏洞 加强Web安全,里面需要讲到很多实战案例,在漏洞挖掘案例中分为了手工挖掘、工具挖掘、代码审...

    klinson 评论0 收藏0
  • 信安 - 收藏集 - 掘金

    摘要:咱妈说别乱点链接之浅谈攻击阅读掘金作者马达编辑迷鹿马达,精通开发开发,擅长接口设计以及平台化建设,独自主导过多个产品。一题目购物应用分环境要求安全学习资料汇总掘金安全学习资料汇总安全学习网站收集 咱妈说别乱点链接之浅谈 CSRF 攻击 - 阅读 - 掘金作者 | 马达编辑 | 迷鹿 马达, 精通PHP开发、Web开发,擅长api接口设计以及平台化建设,独自主导过多个Web产品。目前就职...

    lushan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<