Scanner 如何决定等待用户输入以及为什么它不等待使用 toString 的输入?

How Scanner decides to wait for user input & why it doesn't wait for input with toString?

我试图通过使用 Scanner 对象根据需要进一步处理来捕获用户输入(字符串),同时我尝试使用未在标准字符串方法中列出的方法 class.

所以我的代码如下所示:

    Scanner user_input = new Scanner(System.in);
    System.out.println("Please enter the string");
    String captured_string = user_input.toString();
    System.out.println(captured_string);

使用 .toString 根本不会抛出错误,而且程序也不会等待用户输入。

我知道使用 .nextLine 可以解决这里的问题,因为它是定义用于 Scanner class.

的标准方法

谁能帮忙理解一下,为什么程序不等待用户输入?

您需要使用 nextLine 方法,因为 toString 将对象扫描器转换为字符串,这就是它打印这些奇怪内容的原因。

Scanner.toString() 方法 returns 有关 Scanner 对象本身的信息,而不是您正在使用的输入流中的任何数据。请参阅文档:

Returns the string representation of this Scanner. The string representation of a Scanner contains information that may be useful for debugging. The exact format is unspecified.

当您想从输入流中读取数据时,您必须使用任何 next*() 方法,例如 nextLine()

...while doing that I tried using a method which is not listed in standard methods of String class.

Java 中的每个 class 继承一个 class 调用,Object by default. The class, Object has a method called, toString 其中 returns 一个 String。这意味着如果 class 不覆盖(即重新定义)方法 toString,在其对象上调用此方法将打印 Object#toString returns.

using .toString does not throw an error at all

既然你已经理解了toString的概念,我就不需要再向你解释为什么它没有抛出错误了。

but also the program does not wait for the user input.

您为此调用了错误的方法。为了等待输入,Scanner has the method, next 和以名称 next 开头的方法(例如 nextLinenextInt 等)根据您的要求。我建议你花一些时间研究文档。示例用法如下:

String captured_string = user_input.nextLine();