Entrée de la chaîne de caractères du Scanner Java

j'écris un programme qui utilise une classe D'événements, qui a en elle une instance d'un calendrier, et une description de type chaîne. La méthode pour créer un événement utilise un Scanner dans un mois, jour, année, heure, minute, et une description. Le problème que je vais avoir, c'est que le Scanner.la méthode next () ne renvoie que le premier mot avant un espace. Donc, si l'entrée est "Mon Anniversaire", la description de l'occurrence d'un Événement est tout simplement "Mon".

j'ai fait quelques recherches et découvert que les gens utilisaient un Scanner.nextLine() pour ce problème, mais lorsque j'essaie de cela, il saute juste passé où l'entrée devrait aller. Voici à quoi ressemble une section de mon code:

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());    

Et c'est le résultat que j'obtiens:

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

il passe à côté de l'espace pour entrer la chaîne de description, et par conséquent, la description (qui est initialement définie à un espace vide - " "), n'est jamais changée.

Comment puis-je résoudre ce problème?

17
demandé sur skaffman 2011-05-11 19:17:59

3 réponses

Quand vous lisez dans le année mois jour heure minutes avec quelque chose comme nextInt() il laisse le reste de la ligne dans l'analyseur/tampon (même si elle est vide) donc, quand vous appelez nextLine() vous lisez le reste de cette première ligne.

je vous suggère d'appeler scan.nextLine() avant d'imprimer votre prochaine invite à jeter le reste de la ligne.

15
répondu Peter Lawrey 2011-05-11 15:30:24

Quand vous lisez dans le année mois jour heure minutes avec quelque chose comme nextInt() il laisse le reste de la ligne dans l'analyseur/tampon (même si elle est vide) donc, quand vous appelez nextLine() vous lisez le reste de cette première ligne.

je vous conseille d'utiliser scan.next() au lieu de scan.nextLine().

3
répondu ajas 2013-01-04 02:05:28
    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();
0
répondu Logan M 2017-07-04 11:00:12