Java 不使用Scanner读取System.in输入流(自己实现一个InputReader)

StringTokenizer

效率高于split()

构造方法

public StringTokenizer(String str,String delim,boolean returnTokens);

public StringTokenizer(String str,String delim);

public StringTokenizer(String str);

常用方法

int countTokens():返回nextToken方法被调用的次数

boolean hasMoreTokens():返回是否还有分隔符

boolean hasMoreElements():返回是否还有分隔符

String nextToken():返回从当前位置到下一个分隔符的字符串

Object nextElement():返回从当前位置到下一个分隔符的字符串

String nextToken(String delim):与4类似,以指定的分隔符返回结果

InputReader

源码

import java.io.*;
import java.util.*;

class InputReader {
    private final static int BUF_SZ = 65536;
    private BufferedReader in;
    private StringTokenizer tokenizer;

    InputReader(InputStream buf) {
        this.in = new BufferedReader(new InputStreamReader(buf), BUF_SZ);
        tokenizer = new StringTokenizer("");
    }

    private String next() {
        while (!tokenizer.hasMoreTokens()) {
            try {
                tokenizer = new StringTokenizer(in.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return tokenizer.nextToken().trim();
    }

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

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

使用方法

public class Main {
    public static void main(String[] args) {
        // write your code here
        var cin = new InputReader(System.in);
        System.out.println(cin.nextInt());
        System.out.println(cin.nextDouble());
    }
}

Sample Input

10010 10086.1

Sample Output

10010
10086.1

猜你喜欢

转载自www.cnblogs.com/YY666/p/11787812.html