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);
        }

エラーは 2 回目の入力後に発生します。助けてください。

4

1 に答える 1

5

BufferedReader#readLine()メソッドは、行末の改行文字を読み取りません。したがって、readLine()2 回呼び出すと、最初の呼び出しで入力が読み取られ、2 回目の呼び出しで最初の入力の残りが読み取らnewlineれます。

それが、あなたが与えた入力をスキップしている理由です。

BufferedReader#skip()の後に改行文字をスキップするために使用できreadLineますfor loop

于 2012-12-20T06:36:16.527 に答える