Java:扫描仪的 next() 在 Scite 和命令提示符中的行为不同

标签 java java.util.scanner scite

我正在尝试一个非常简单的Java程序,该程序使用Scanner及其方法next(),不知何故我遇到了一个奇怪的情况。这是代码:

import java.util.Scanner;
public class Test
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        String input = "";

        System.out.println("Enter a sentence here: ");

        while(!input.endsWith("."))
        {
            input = scan.next();
            System.out.println("Echo: " + input);
        }
    }
}

如果我在 Scite 中运行它,每次我在单词后输入空格时,“Echo:”行 + 输入的单词将立即打印在空格后面。

假设我在键盘中输入如下内容:

apple orange mango.

在 scite 中它看起来像这样:

Enter a sentence here:
apple Echo: apple
orange Echo: orange
mango. Echo: mango.

但是如果我在命令提示符下运行它并键入相同的输入,它将如下所示:

Enter a sentence here: 
apple orange mango.
Echo: apple
Echo: orange
Echo: mango.

注意:在命令提示符下运行时,我必须在输入“apple Orange mango”后按 Enter 键。否则它不会打印“Echo”句子。还尝试了 NetBeans 中的代码,它给出了与命令提示符相同的结果。

为什么程序的行为不同?

最佳答案

缓冲。在命令提示符处,显然在 NetBeans 中,stdin 流是行缓冲的,因此您的应用程序在输入换行符(或缓冲区已满)之前不知道您已键入任何内容。 Scite 显然不会对输入流进行行缓冲,而是在每个字符之后或每个空格处刷新它。

关于Java:扫描仪的 next() 在 Scite 和命令提示符中的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8196114/

相关文章:

java - 使用正则表达式和 android 对不同的字段进行分类

java - 错误: Integers added together in successive uses of scanner class

java - 我的 java for 循环跳过了一个步骤

scite - 如何删除 SciTE 中标记的行?

java - 如何对齐 JtextPane 或 StringBuffer 中的文本

java - 以编程方式获取 Java 小程序的屏幕截图

java - java中断言后出现NullPointerException

使用相同变量进行输入的 Java 简单程序 - 不起作用

javascript - 在 SciTE 中测试和编辑 JavaScript(独立的和 HTML 中的)?

lua - lua 中的 io.read() 错误