微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

程序在Scanner#nextLine没有收到“空白”或“输入”之前不会打印任何内容 输入输出

如何解决程序在Scanner#nextLine没有收到“空白”或“输入”之前不会打印任何内容 输入输出

Scanner in = new Scanner(system.in);
while (in.hasNext()) {
    String a = in.nextLine();
    System.out.println(a + " 1");
}

我只是想检查当输入为SPACE或ENTER时会发生什么,但是直到我的输入既不是SPACE也不是ENTER时,它不会打印任何内容

a                     // input 
a 1                   // output 
                      // SPACE(input) 
c                     // input
  1                   // output
c 1                   // output

为什么直到它读取既不是空白也不是空格的东西时才打印?同样,当它最终打印时,它打印出空格c,它是c 1之前的行,当我输入c时,它给我1和c 1。

解决方法

Java Scanner hasNext() vs. hasNextLine():

也就是说,hasNext()检查输入,如果它还有另一个non-whitespace字符,则返回true。
Whitespace不仅包括空格字符,还包括制表符(\ t),换行符(\ n)以及更多字符。
连续的空白字符被视为单个定界符。

System.in 表示标准输入
当您通过 System.in 初始化 Scanner 时,它将从 Standard Input 中读取数据。
并且它将一直等待输入,除非您的输入是EOF中的Windows Ctrl + Z Ctrl + D )。
因此,扫描程序将始终等待输入中的非空白字符。

输入

当您按 Space Enter 时,它将向发送两个空格字符 \n标准输入,并且函数scanner.hasNext()仍在等待非空白字符。并且scanner.hasNext()不返回任何内容。这就是为什么目前没有输出的原因。
然后按 c ,它将非空白字符c发送到标准输入

输出

现在您的标准输入包含 \n c,第三个不是空格字符。
最后,函数scanner.hasNext() 返回true
然后scanner.nextLine()读一行直到字符\n:它将是 (一个字符),
并打印 1

标准输入现在变为c,只有一个字符,
这将导致scanner.hasNext()再次返回true:
扫描程序将读取一行,该行将是一个字符c
并打印c 1

,

正如@Savior在此post中提到的:

hasNext()检查缓冲区中是否有可解析的令牌,由扫描仪的定界符分隔。 由于扫描仪的定界符为空白,并且linePattern也是空白,因此缓冲区中可能有一个linePattern但没有可解析的标记。

考虑使用hasNextLine()

public class Main {
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String a = in.nextLine();
            System.out.println(a + " 1");
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?