BufferedReader / Scanner最后一行阅读问题

时间:2016-08-29 06:26:36

标签: java

在解决黑客级别的问题时,我遇到的问题是scanner / bufferedreader无法读取最后一个问题。由他们提供的输入就像

10

abcdefghijk

2

R 1 2

W 3 4

因此,两个scanner / bufferedreader都无法读取最后一行。如果输入类似,那么代码似乎工作正常。

10

abcdefghijk

2

R 1 2

W 3 4

(输入结束)

public class ScannerTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner input = new Scanner(System.in);
        int len = input.nextInt();
        input.nextLine();
        String inputString = input.nextLine();
        int qc = input.nextInt();
        input.nextLine();
        System.out.println();
        System.out.println(len + inputString + qc);
        for(int i=0;i<qc;i++){
            String l = input.next();
            int le = input.nextInt();
            int ri =  input.nextInt();
            input.nextLine();
            System.out.println(l+le+ri);
        }
        input.close();
    }
}

以下是我正在使用的示例代码。我知道我们需要在行尾的\ r或\ n来读取scan / bufferedreader的readline。但是,任何人都可以提供此问题的解决方案,因为输入来自预定义的系统。

2 个答案:

答案 0 :(得分:3)

BufferedReader会读取最后一行,即使它没有以换行符结束。 System.in是罪魁祸首,它有自己的行缓冲。 本机系统的事情:假设你按了几个退格键来改变最后一个数字...

答案 1 :(得分:1)

问题在于:

input.nextLine();
String inputString = input.nextLine();

你正在消耗一条线来扔掉它。

另一件事是:特别是在处理标准库时 - 不要假设某些东西被破坏/不起作用。在99,999%的情况下,问题出在您的代码中。