首页 > 解决方案 > 如何为自定义扫描仪编写 Java hasNext() 函数

问题描述

我在互联网上找到了许多用于快速 Java IO 的自定义 Scanner 类,但它们都没有提供自定义 hasNext() 方法实现,所以我不知道如何在输入可变大小时读取数据。

这是这些类之一的示例:

class Reader {
static BufferedReader reader;
static StringTokenizer tokenizer;

/** call this method to initialize reader for InputStream */
static void init(InputStream input) {
    reader = new BufferedReader(
                 new InputStreamReader(input) );
    tokenizer = new StringTokenizer("");
}

/** get next word */
static String next() throws IOException {
    while ( ! tokenizer.hasMoreTokens() ) {
        //TODO add check for eof if necessary
        tokenizer = new StringTokenizer(
               reader.readLine() );
    }
    return tokenizer.nextToken();
}

static int nextInt() throws IOException {
    return Integer.parseInt( next() );
}

static double nextDouble() throws IOException {
    return Double.parseDouble( next() );
}
}

我怎么能自己写这个?谢谢。

标签: javaio

解决方案


不幸的是,BufferedReader 没有hasNext()函数,但它包含一个ready()函数,该函数是一个布尔函数,用于判断是否有要读取的输入,您可以在此处找到有关它的信息https://docs.oracle.com/javase/ 8/docs/api/java/io/BufferedReader.html#ready--

因此,如果您想添加到您提到的课程中,它将如下所示:

static boolean ready() throws IOException {return reader.ready();}

但是请注意,如果输入不存在ready()将返回 false。


推荐阅读