Сканер читает только первое слово вместо строки - PullRequest
14 голосов
/ 30 октября 2011

В моей текущей программе один метод просит пользователя ввести описание продукта как String. Однако, когда я позже попытаюсь распечатать эту информацию, отображается только первое слово из String. Что может быть причиной этого? Мой метод заключается в следующем:

void setDescription(Product aProduct) {
    Scanner input = new Scanner(System.in);
    System.out.print("Describe the product: ");
    String productDescription = input.next();
    aProduct.description = productDescription;
}

Таким образом, если пользовательский ввод - «Газированная сода с апельсиновым вкусом», System.out.print выдаст только «Игристое».

Любая помощь будет принята с благодарностью!

Ответы [ 5 ]

26 голосов
/ 30 октября 2011

Заменить next() на nextLine():

String productDescription = input.nextLine();
10 голосов
/ 30 октября 2011

Используйте input.nextLine(); вместо input.next();

3 голосов
/ 30 октября 2011

javadocs для сканера ответ на ваш вопрос

Сканер разбивает свои входные данные на токены, используя шаблон разделителя, который по умолчанию соответствует пробелу.

Вы можете изменить шаблон пробелов по умолчанию, используемый Сканером, выполнив что-то вроде

Scanner s = new Scanner();
s.useDelimiter("\n");
1 голос
/ 30 октября 2011

Javadoc на помощь:

Сканер разбивает свои входные данные на токены, используя шаблон разделителя, который по умолчанию соответствует пробелу

nextLine - это, вероятно, метод, который вы должны использовать.

1 голос
/ 30 октября 2011

input.next () принимает первое разделенное пробелами слово входной строки. По замыслу он делает то, что вы описали. Попробуйте input.nextLine().

...