Java Scanner.hasNextLine()没有检测到空行?

Shu*_*eng 0 java

假设我有以下文件

Hej Hej Hej
A A A A
Run Code Online (Sandbox Code Playgroud)

与A的线后的换行符.

我的问题是代码

while (in.hasNextLine()) {
    String line = in.nextLine();
    if (in.hasNextLine()) {
        out.println(line);
    }
    else {
        out.print(line);
    }
}
Run Code Online (Sandbox Code Playgroud)

没有检测到这个额外的行in.hasNextLine(),所以我错过了输出文件中的换行符(我正在做一个文件串联程序).问题是什么?

Kon*_*kov 5

你调用.hasNextLine()两次,而你只读了一次"下一行".

你的代码应该是:

while (in.hasNextLine()) {
    String line = in.nextLine();        
    out.println(line);            
}
Run Code Online (Sandbox Code Playgroud)

或者,如果你想再次在循环中检查下一行是否存在,你应该这样做(我发现它不够干净,因为它与上面的代码片段完全相同):

while (in.hasNextLine()) {
    String line = in.nextLine();
    if (in.hasNextLine()) {
        String nextLine = in.nextLine();
        out.println(line);
    } else {
        out.print(line);
    }
}
Run Code Online (Sandbox Code Playgroud)