我目前正在进行一项任务,我必须能够读取某些预定数量的输入行,每行输入都与某一行输出相关。简单地说,如果我有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));
}
}
这是将每一行读入输入的代码,是否有我遗漏的内容?
编辑:我无法编辑输入以在最后包含空行,正如您所建议的那样。这是一个很棒的解决方案,但不幸的是我不允许这样做!
答案 0 :(得分:0)
取自Scanner.nextLine()
,
由于此方法继续搜索输入以查找行分隔符,因此如果没有行分隔符,它可以缓冲搜索要跳过的行的所有输入。
由于您要将行复制并粘贴到标准输入,因此需要在\n
的最后一行末尾使用行分隔符nextLine()
才能生效。当您按Enter键时,\n
将添加到最后一行的末尾,这就是最后一行将打印的原因 - 扫描程序检测到它并完成读取行。
请记住,\n
实际上并不可见,但标记了一行的结尾。
您可以通过在粘贴的输入的末尾放置一个空行来解决此问题。
答案 1 :(得分:0)
我认为问题是由您将数据复制粘贴到标准输入的方法引起的。例如,如果源文件中有3行,就像这样。
我可以使用简单的代码轻松重现您的行为
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;并再次尝试你的测试。我认为它会像你期望的那样工作。
希望它有所帮助!