6

我需要从标准输入中读取。我对 BufferedReader 不太熟悉,到目前为止只使用过 Scanner。扫描仪(或者可能是我的代码中的某些东西)不断给我 TLE。现在的问题是 BufferedReader 似乎跳过了一些行,而我不断收到 NumberFormatException。

这是我的代码:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    int cases = Integer.parseInt(reader.readLine());

    for(int i = 0; i < cases && cases <= 10; i++) {
        int numLines = Integer.parseInt(reader.readLine());
        String[] lines = new String[numLines + 1];
        HashSet<String> pat = new HashSet<String>();

        for(int j = 0; j < numLines && j <= 10; j++) {
            String l = reader.readLine();

            String patternStr = "\\W+";
            String replaceStr = "";

            Pattern pattern = Pattern.compile(patternStr);
            Matcher matcher = pattern.matcher(l.toString());

            String m = matcher.replaceAll(replaceStr);

            lines[j] = m;
            getPatterns(m, pat);

            System.out.println(m);
        }

错误发生在第二次输入之后。请帮忙。

4

1 回答 1

5

BufferedReader#readLine()方法不会读取行尾的换行符。因此,当您调用readLine()两次时,第一个将读取您的输入,第二个将读取第一个的newline剩余部分。

这就是为什么它会跳过您提供的输入。

您可以BufferedReader#skip()在.readLinefor loop

于 2012-12-20T06:36:16.527 回答