【问题标题】:How to implement hasNext() method with BufferedReader + StringTokenizer?如何使用 BufferedReader + StringTokenizer 实现 hasNext() 方法?
【发布时间】:2020-06-27 18:33:19
【问题描述】:

我有这个快速阅读器课程:

static class FastReader { 
    BufferedReader br; 
    StringTokenizer st; 

    public FastReader() { 
        br = new BufferedReader(new InputStreamReader(System.in)); 
    } 

    String next() { 
        while (st == null || !st.hasMoreElements()) { 
            try { 
                st = new StringTokenizer(br.readLine()); 
            } 
            catch (IOException  e) { 
                e.printStackTrace(); 
            } 
        } 
        return st.nextToken(); 
    } 

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

    long nextLong() { 
        return Long.parseLong(next()); 
    } 

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

    String nextLine() { 
        String str = ""; 
        try { 
            str = br.readLine(); 
        } 
        catch (IOException e) { 
            e.printStackTrace(); 
        } 
        return str; 
    } 
    
    int[] readArray(int n) {
        int[] a = new int[n];
        for(int i=0; i<n; i++) {
            a[i] = nextInt();
        }
        return a;
    }
    
}

我想在到达文件末尾后立即停止读取输入。我知道这可以使用扫描仪 hasNext() 方法来完成,我怎样才能为我的阅读器类实现相同的方法?

PS。我想阅读这个问题的输入: https://www.spoj.com/problems/COINS/

【问题讨论】:

    标签: java input java.util.scanner bufferedreader


    【解决方案1】:

    你可以设置一个mark()然后尝试读取一行,如果成功你可以reset()到你设置标记的地方,否则返回truefalse

    您还必须检查当前标记器是否还有更多标记。例如:

    boolean hasNext() {
        if (st != null && st.hasMoreTokens()) {
            return true;
        }
        String tmp;
        try {
            br.mark(1000);
            tmp = br.readLine();
            if (tmp == null) {
                return false;
            }
            br.reset();
        } catch (IOException e) {
            return false;
        }
        return true;
    }
    

    mark() 采用readAheadLimit 参数来限制在设置该标记时可以读取的字符数,如果您正在处理长行,您可以增加它。

    【讨论】:

    • 我无法使用此功能,而(sc.hasNext()) 正在终止而不接受任何输入(sc 是我的 FastReader 对象)
    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多