java - 如何为自定义扫描仪编写 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() );
}
}
我怎么能自己写这个?谢谢。
解决方案
不幸的是,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。
推荐阅读
- python - Irregular behaviour of celery
- reactjs - Whats the proper way of selecting selectedOption of select tag in react
- python - 如何获取编写 bot 命令的用户?不和谐.py
- node.js - 一次性收费的条纹发票
- javascript - 通过单击日历上的日期 Javascript Django 按日期获取项目
- python - 在 python 中安装 selenium 包时出现环境错误
- kotlin - Kotlin 将列表划分为列表
- azure-functions - Azure Functions - 尝试以访问禁止的方式访问套接字
- typescript - 无法使用 TypeScript 从外部 NPM 库导入命名导出
- scala - Spark Session 返回错误:Apache NiFi