【问题标题】:How Scanner decides to wait for user input & why it doesn't wait for input with toString?Scanner 如何决定等待用户输入以及为什么不等待 toString 的输入?
【发布时间】:2021-01-19 11:59:42
【问题描述】:

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

所以我的代码如下所示:

    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 类中使用而定义的标准方法。

有人可以帮助理解,为什么程序不等待用户输入?

【问题讨论】:

  • 打印什么
  • 请输入字符串 java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false][need input=false][source closed=false] [跳过=false][组分隔符=\x{2c}][小数分隔符=\x{2e}][正前缀=][负前缀=\Q-\E][正后缀=][负后缀=] [NaN 字符串=\Q�\E][无穷大字符串=\Q∞\E]
  • @Simon 请edit您的帖子包含您想问的问题。

标签: java java.util.scanner tostring


【解决方案1】:

...在这样做时,我尝试使用未列出的方法 String 类的标准方法。

Java 中的每个类都继承一个名为 Object 的类,默认情况下。类Object 有一个名为toString 的方法,它返回一个String。这意味着如果一个类没有覆盖(即重新定义)方法toString,则在其对象上调用此方法将打印Object#toString 返回的内容。

使用 .toString 根本不会抛出错误

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

而且程序也不等待用户输入。

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

String captured_string = user_input.nextLine();

【讨论】:

    【解决方案2】:

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

    返回此 Scanner 的字符串表示形式。 Scanner 的字符串表示形式包含可能对调试有用的信息。确切的格式未指定。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-20
        • 2013-01-13
        • 1970-01-01
        • 2018-06-01
        • 1970-01-01
        • 2016-05-06
        • 1970-01-01
        • 2013-04-04
        相关资源
        最近更新 更多