首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么java.util.Scanner存在?

为什么java.util.Scanner存在?
EN

Stack Overflow用户
提问于 2012-09-12 12:26:55
回答 5查看 4.1K关注 0票数 3

可能重复: 扫描仪与BufferedReader

是否存在使用java.util.Scanner来读取某种输入的情况?在我的小测试中,我发现与java.util.Bufferedreader或从java.util.InputStreamReader实现自己的阅读器相比,它非常慢。

那我为什么要用扫描仪呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-12 12:30:33

Scanner类的主要用途是使用正则表达式解析原始类型和字符串的文本。您可以提供几种要读取的资源类型。

票数 4
EN

Stack Overflow用户

发布于 2012-09-12 12:30:09

来自文档

一个简单的文本扫描器,它可以使用正则表达式解析基本类型和字符串。

不会做BufferedReader的。

票数 6
EN

Stack Overflow用户

发布于 2012-09-12 12:42:24

虽然扫描仪速度相对较慢,但它往往足够快,而且比BufferedReader强大得多。

代码语言:javascript
复制
public static void main(String... args) throws IOException {

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 10000; i++)
        sb.append("line: ").append(i).append("\n");
    String lines = sb.toString();

    for (int i = 0; i < 6; i++) {
        testBufferedReader(lines);
        testScanner(lines);
    }
}

private static void testBufferedReader(String text) throws IOException {
    int count = 0;
    BufferedReader br = new BufferedReader(new StringReader(text));
    long start = System.nanoTime();
    while (br.readLine() != null)
        count++;
    long time = System.nanoTime() - start;
    System.out.printf("BufferedReader.readLine() took an average of %,d ns count=%,d%n", time / count, count);
}

private static void testScanner(String text) throws IOException {
    int count = 0;
    Scanner sc = new Scanner(new StringReader(text));
    long start = System.nanoTime();

    while (sc.hasNextLine()) {
        sc.nextLine();
        count++;
    }

    long time = System.nanoTime() - start;
    System.out.printf("Scanner nextLine took an average of %,d ns count=%,d%n", time / count, count);
}

最后打印

代码语言:javascript
复制
BufferedReader.readLine() took an average of 124 ns count=10,000
Scanner nextLine took an average of 1,549 ns count=10,000

虽然相对差异很大,但扫描仪每台不到几微秒.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12388154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档