Строка ввода для сканера Java - PullRequest
18 голосов
/ 11 мая 2011

Я пишу программу, которая использует класс Event, в котором есть экземпляр календаря и описание типа String.Метод создания события использует сканер для получения месяца, дня, года, часа, минуты и описания.У меня проблема в том, что метод Scanner.next () возвращает только первое слово перед пробелом.Поэтому, если ввод «Мой день рождения», описание этого экземпляра события просто «Мой».

Я провел некоторое исследование и обнаружил, что люди использовали Scanner.nextLine () для этой проблемы, но когдаЯ пытаюсь это, он просто пропускает мимо, куда должен идти ввод.Вот как выглядит фрагмент моего кода:

System.out.print("Please enter the event description: ");
String input = scan.nextLine();
e.setDescription(input);
System.out.println("Event description" + e.description);
e.time.set(year, month-1, day, hour, min);
addEvent(e);
System.out.println("Event: "+ e.time.getTime());    

И вот такой вывод я получаю:

Please enter the event description: Event description
Event: Thu Mar 22 11:11:48 EDT 2012

Он пропускает пробел, чтобы ввести описание String, и какрезультат, описание (которое изначально имеет пустое место - ""), никогда не изменяется.

Как это исправить?

Ответы [ 4 ]

17 голосов
/ 11 мая 2011

Когда вы читаете в год, месяц, день, часы, минуты с помощью функции nextInt (), она оставляет остаток строки в анализаторе / буфере (даже если он пуст), поэтому, когда вы вызываете nextLine (), вы читаете остаток эта первая строка.

Я предлагаю вам вызвать scan.nextLine () до того, как вы напечатаете следующее приглашение, чтобы отменить оставшуюся часть строки.

3 голосов
/ 04 января 2013

Когда вы читаете в год, месяц, день, часы, минуты с чем-то вроде nextInt(), он оставляет остаток строки в анализаторе / буфере (даже если он пуст), поэтому при вызове nextLine() вы читаете остаток эта первая строка.

Я предлагаю вам использовать scan.next() вместо scan.nextLine().

0 голосов
/ 05 ноября 2018

Если вы используете метод nextLine (), следующий сразу за методом nextInt (), nextInt () считывает целочисленные токены;из-за этого последний символ новой строки для этой строки целочисленного ввода все еще ставится в очередь во входном буфере, и следующая функция nextLine () будет читать остаток целой строки (которая является пустой).Таким образом, мы читаем, может прочитать пустое место, чтобы другая строка могла работать.Проверьте ниже код.

import java.util.Scanner;

открытый класс Решение {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    int i = scan.nextInt();
    Double d = scan.nextDouble();
    String f = scan.nextLine();
    String s = scan.nextLine();


    // Write your code here.

    System.out.println("String: " + s);
    System.out.println("Double: " + d);
     System.out.println("Int: " + i);
}

}

0 голосов
/ 04 июля 2017
    Scanner ss = new Scanner(System.in);
    System.out.print("Enter the your Name : ");
    // Below Statement used for getting String including sentence
    String s = ss.nextLine(); 
   // Below Statement used for return the first word in the sentence
    String s = ss.next();
...