web-dev-qa-db-fra.com

Le scanner lit uniquement le premier mot au lieu de la ligne

Dans mon programme actuel, une méthode demande à l'utilisateur d'entrer la description d'un produit comme entrée String. Cependant, lorsque j'essaie ultérieurement d'imprimer ces informations, seul le premier mot de String s'affiche. Quelle pourrait en être la cause? Ma méthode est la suivante:

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

Donc, si l'entrée utilisateur est "Soda pétillant à saveur d'orange", le System.out.print ne produira que "Sparkling".

Toute aide sera fortement appréciée!

14
Kristian

Remplacez next() par nextLine() :

String productDescription = input.nextLine();
26
Tim Cooper

Utilisez input.nextLine(); au lieu de input.next();

10
Eng.Fouad

javadocs for Scanner répondez à votre question

Un scanner divise son entrée en jetons à l'aide d'un modèle de délimiteur, qui correspond par défaut aux espaces blancs.

Vous pouvez modifier le motif d'espaces par défaut utilisé par le scanner en faisant quelque chose comme

Scanner s = new Scanner();
s.useDelimiter("\n");
3
ptomli

input.next () prend le premier mot délimité par des espaces de la chaîne d'entrée. Donc, par sa conception, il fait ce que vous avez décrit. Essayez input.nextLine().

1
Cam

Javadoc à la rescousse:

Un scanner divise son entrée en jetons à l'aide d'un modèle de délimiteur, qui correspond par défaut aux espaces blancs

nextLine est probablement la méthode à utiliser.

1
JB Nizet