当前位置: 首页 > 知识库问答 >
问题:

程序不会打印任何东西,直到Scanner#nextLine()收到不是“空格”或“输入”[副本]

晏卓君
2023-03-14
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
    String a = in.nextLine();
    System.out.println(a + " 1");
}

我只想检查当输入为空格或回车时会发生什么,但它不会打印任何东西,直到我的输入既不是空格也不是回车,就像这样

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

为什么它不打印,直到它读取既不是BLANK也不是SPACE的东西?此外,当它最终打印时,它打印的SPACE是c 1之前的行,当我输入c时,它给我1和c 1。

共有2个答案

孟晋
2023-03-14

正如@Savior在本文中提到的:

hasNext()检查缓冲区中是否有可解析的标记,由扫描仪的分隔符分隔。由于扫描仪的分隔符是空白,而线型图案也是空白,因此缓冲区中可能有线型图案,但没有可解析的标记。

考虑使用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");
        }
    }
}
罗茂实
2023-03-14

Java扫描仪hasNext()vs. hasNextLine():也就是说,hasNext()检查输入并返回true,如果它有另一个非空白字符。
Whitespace不仅包括空格字符,还包括制表符空间(\t)、换行符(\n),甚至更多字符。
连续的空白字符被视为单个分隔符。

系统in表示标准输入<当你通过系统时。为了初始化扫描仪,它将从标准输入中读取数据
它将始终等待输入,除非您的输入是EOFWindows中的CtrlZCtrlD
因此扫描仪将始终等待输入的非空白字符。

当您按空格键时,它会向标准输入和功能扫描仪发送两个空格字符\n。hasNext()仍在等待非空白字符。和扫描仪。hasNext()不返回任何内容。这就是为什么目前没有产出
然后按c,它会将非空白字符c发送到标准输入。

现在,标准输入包含\nc,第三个不是空白字符
最后是函数扫描器。hasNext()返回true
然后是扫描仪。nextLine()读一行直到字符\n:它将是(一个字符),
和程序打印1

标准输入现在变成c,只有一个字符,
这将导致扫描仪。hasNext()再次返回true:
扫描仪将读取一行字符c
并打印c1

 类似资料:
  • 问题内容: 我在将任何内核模块构建到我的机器上时遇到问题。每当我构建模块时,modpost总是说模块为零: 为了解决该问题,我编写了一个测试模块(hello.c): 这是模块的Makefile: 在计算机上构建它时,得到以下输出: 当我在另一台机器上制作模块时,它成功了: 我寻找了有关modpost的任何相关文档,但收效甚微。任何人都知道modpost如何决定要构建什么?我可能会缺少一个环境吗?

  • 我正试图装配一个KafkaStorm“你好世界”系统。我有Kafka安装和运行,当我发送数据与Kafka生产者我可以读取它与Kafka控制台消费者。 我从O'Reilly的《Storm入门》一书中选取了第二章的例子,并将其修改为使用Kafka斯库特(KafkaSpout)而不是普通的喷口。 当我运行应用程序时,kafka中的数据已经挂起,KafkaSpout的下一个线程不会收到任何消息——它进入,

  • 问题内容: 我的entityManagerpersist()从序列中获取ID,并将其放入我的Image对象,但是Image对象本身未显示在数据库中。EntityManager.flush()给出错误,所以我不能以这种方式提交。这是我的代码。 问题答案: 这通常在未应用Transaction in时发生。我怀疑@Transactional拦截器没有正确拦截。

  • 我有一个计算输入的函数,我需要不断询问他们的输入并计算,直到他们输入一个空行。我该怎么设置呢? 我想用这样的东西,但实际上不起作用。有什么帮助吗?

  • 我目前正在使用Jupyter笔记本,我想强制它将Python日志打印到输出单元格。 我用的是以前用这种方式工作的旧笔记本,可能是旧版本的Jupyter笔记本。 我将日志设置为: 但当我打电话时: 它不会在输出单元格中打印任何内容。它只是在我启动Jupyter笔记本的控制台中打印出内容。 我正在使用并且在我的虚拟环境中安装的包是: 单元格中的日志打印输出是否已更改?是否有某种方法可以强制将日志记录写

  • 问题内容: 我是一个相对较新的程序员,所以这可能是一个非常简单的问题,但是让我有些困惑。 我正在尝试将Java GUI的最终输出打印到打印机。现在,在我的GUI中,有了它,当您单击打印时,会弹出一个弹出窗口,列出可用的打印机,并根据您选择的打印机,将其打印到该打印机。 但是事实并非如此。我通过搜索互联网来解决此问题,从而获得了大部分代码,并找到了一些很有前途的代码。但是,它是从文件打印出来的。因此