web-dev-qa-db-fra.com

Java Scanner String entrée

J'écris un programme qui utilise une classe Event, qui contient une instance d'un calendrier et une description de type String. La méthode pour créer un événement utilise un scanner pour enregistrer un mois, un jour, une année, une heure, une minute et une description. Le problème que je rencontre est que la méthode Scanner.next () ne renvoie que le premier mot avant un espace. Donc, si l'entrée est "Mon anniversaire", la description de cette instance d'événement est simplement "Mon".

J'ai fait des recherches et j'ai constaté que des personnes utilisaient Scanner.nextLine () pour ce problème, mais lorsque j'essaie, cela ne fait que passer au-delà de l'endroit 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 voici le résultat obtenu:

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

Il passe au-delà de l'espace pour saisir la chaîne de description. Par conséquent, la description (initialement définie sur un espace vide - "") n'est jamais modifiée.

Comment puis-je réparer cela?

18
HolidayTrousers

Quand vous lisez l'année mois jour heure minutes avec quelque chose comme nextInt (), cela laisse le reste de la ligne dans l'analyseur/le tampon (même s'il est vide). .

Je vous suggère d'appeler scan.nextLine () avant d'imprimer votre prochain message d'invitation à supprimer le reste de la ligne.

16
Peter Lawrey

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

Je vous suggère d'utiliser scan.next() au lieu de scan.nextLine().

3
ajas
    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
Logan M

Si vous utilisez la méthode nextLine () immédiatement après la méthode nextInt (), nextInt () lit les jetons de nombre entier; pour cette raison, le dernier caractère de nouvelle ligne pour cette ligne d'entrée entière est toujours mis en file d'attente dans le tampon d'entrée et le nextLine () suivant lira le reste de la ligne entière (qui est vide). Donc, nous lisons peut lire l’espace vide d’une autre chaîne pourrait fonctionner. Vérifiez ci-dessous le code.

importer Java.util.Scanner;

classe publique Solution {

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
Mahendra