扫描仪比打印快?

Scanner faster than print?

我遇到了一个奇怪的问题。

到目前为止,我的代码如下所示:

String value = "";
Scanner scanner = new Scanner(System.in);

System.out.print("String 1");
System.out.println("String 2");
value = scanner.nextLine();

当我看到这个时,我希望程序打印以下内容

String 1String 2

然后它应该等我输入一些东西。

但是当我 运行 代码时,它是这样说的:

Exception in thread "main" String 1String2
java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)

然后它告诉我发生错误的行。

所以对我来说,扫描仪似乎在打印字符串之前尝试扫描某些东西。 为什么会这样?

发生排序问题是因为字符串被写入标准输出,而异常(由于您的环境不允许键盘输入)被写入标准错误。

虽然首先写入字符串,但两条数据最终进入两个不同的队列(大概是管道缓冲区),它们之间没有固有的顺序。然后显示的顺序取决于 how/when 环境从两个队列读取输出并将它们合并以显示。

如果您想要可预测的顺序,则必须将两者写入同一基础流,因为单个流中的内容是有序的。

您可以从 Java 端将字符串写入 stderr(例如 System.err.println),或者从环境端确保 stdout 和 stderr 指向同一个流(例如 shell java SomeProgram 2>&1)