Java: next () сканера действует по-разному в Scite и командной строке - PullRequest
1 голос
/ 19 ноября 2011

Я пробую очень простую 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.

В скоте это будет выглядеть так:

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" или это не будет печатать "Эхо" предложения. Также пробовал код в NetBeans, и он дал те же результаты, что и в командной строке.

Почему программа действует по-другому?

1 Ответ

1 голос
/ 19 ноября 2011

буферизация.В командной строке и, по-видимому, в NetBeans, поток stdin буферизуется строкой, поэтому ваше приложение не знает, что вы что-то напечатали, прежде чем вводить новую строку (или буфер заполнен).Scite, очевидно, не буферизует входной поток, но сбрасывает его после каждого символа или в каждом пробеле.

...