Java如何自动输出最后一行?

时间:2018-03-16 14:53:40

标签: java parsing system.out

我目前正在进行一项任务,我必须能够读取某些预定数量的输入行,每行输入都与某一行输出相关。简单地说,如果我有200行输入,我还应该有200行输出。我通过标准输入上的扫描仪读取输入,将其复制粘贴到标准输入中,并自动输出除最后一行之外的每一行。要显示最后一行,我必须按Enter键。如何制作以便自动显示最后一行,我不必按回车键?

    int numberOfPackets = Integer.parseInt(in.nextLine());

    for (int i = 0; i < numberOfPackets; i++){

        String nextLine = in.nextLine();

        if (nextLine.charAt(0) == 'D'){                             //Check to see if the packet is a data packet or a router packet
            out.print("\n" + dataParser(nextLine));
        } else if (nextLine.charAt(0) == 'R'){
            out.print("\n" + routeParser(nextLine));
        }
    }

这是将每一行读入输入的代码,是否有我遗漏的内容?

编辑:我无法编辑输入以在最后包含空行,正如您所建议的那样。这是一个很棒的解决方案,但不幸的是我不允许这样做!

2 个答案:

答案 0 :(得分:0)

取自Scanner.nextLine()

的文件
  

由于此方法继续搜索输入以查找行分隔符,因此如果没有行分隔符,它可以缓冲搜索要跳过的行的所有输入。

由于您要将行复制并粘贴到标准输入,因此需要在\n的最后一行末尾使用行分隔符nextLine()才能生效。当您按Enter键时,\n将添加到最后一行的末尾,这就是最后一行将打印的原因 - 扫描程序检测到它并完成读取行。

请记住,\n实际上并不可见,但标记了一行的结尾。

您可以通过在粘贴的输入的末尾放置一个空行来解决此问题。

答案 1 :(得分:0)

我认为问题是由您将数据复制粘贴到标准输入的方法引起的。例如,如果源文件中有3行,就像这样。

enter image description here

我可以使用简单的代码轻松重现您的行为

public static void main(String[] args) {
    try (Scanner sc = new Scanner(System.in)) {
        for (int i = 0; i < 3; i++) {
            System.out.println(sc.nextLine());
        }
    }
}

当您选择行时,除了最后一行之外的所有行都将具有CRLF符号,因此扫描程序将其视为输入结束并且您看到了输出。

您可以打开源文件,将光标移动到最后一个字符,然后按&#34;输入&#34;并再次尝试你的测试。我认为它会像你期望的那样工作。

希望它有所帮助!