Как написать функцию Java hasNext () для пользовательских сканеров - PullRequest
1 голос
/ 11 июля 2020

Я нашел несколько настраиваемых классов сканера на inte rnet для быстрого Java ввода-вывода, но ни один из них не предлагает настраиваемую реализацию метода 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() );
}
}

Как я мог go написать это сам? Спасибо.

1 Ответ

1 голос
/ 16 июля 2020

К сожалению, BufferedReader не имеет функции hasNext(), но включает в себя функцию ready(), которая является логической функцией, которая сообщает, есть ли ввод для чтения или нет. Вы можете найти об этом здесь https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html#ready - .

Итак, если вы хотите добавить к классу, который вы упомянули, он будет go следующим образом:

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

Однако будьте осторожны, если ввод отсутствует ready() вернет false.

...