Java Scanner String-invoer

Ik ben een programma aan het schrijven dat een Event-klasse gebruikt, met daarin een instantie van een kalender en een beschrijving van het type String. De methode om een gebeurtenis aan te maken maakt gebruik van een scanner om een maand, dag, jaar, uur, minuut en een beschrijving op te nemen. Het probleem dat ik heb, is dat de methode Scanner.next() alleen het eerste woord vóór een spatie retourneert. Dus als de invoer “Mijn verjaardag” is, is de beschrijving van die instantie van een evenement gewoon “Mijn”.

Ik heb wat onderzoek gedaan en ontdekte dat mensen Scanner.nextLine() voor dit probleem gebruikten, maar als ik dit probeer, springt het voorbij waar de invoer zou moeten komen. Zo ziet een gedeelte van mijn code eruit:

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

En dit is de output die ik krijg:

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

Het springt voorbij de spatie om de beschrijvingstekenreeks in te voeren, en als resultaat wordt de beschrijving (die aanvankelijk is ingesteld op een lege ruimte – ” “) nooit gewijzigd.

Hoe kan ik dit oplossen?


Antwoord 1, autoriteit 100%

Als je het jaar maand dag uur minuten leest met iets als nextInt() laat het de rest van de regel in de parser/buffer (zelfs als het leeg is), dus als je nextLine() aanroept, lees je de rest van deze eerste regel.

Ik raad u aan scan.nextLine() te bellen voordat u uw volgende prompt afdrukt om de rest van de regel te negeren.


Antwoord 2, autoriteit 9%

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

Antwoord 3, autoriteit 5%

Als u de methode nextLine() direct na de methode nextInt() gebruikt, leest nextInt() integer-tokens; hierdoor staat het laatste teken van de nieuwe regel voor die regel van integer-invoer nog steeds in de wachtrij in de invoerbuffer en de volgende nextLine() leest de rest van de integer-regel (die leeg is). Dus we kunnen lezen dat de lege ruimte naar een andere string zou kunnen werken. Controleer onderstaande code.

import java.util.Scanner;
public class 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);
    }
}

Antwoord 4

gebruik dit om de vorige toetsenbordbuffer te wissen voordat u de tekenreeks scant
het zal je probleem oplossen
scanner.nextLine();//dit is om de toetsenbordbuffer te wissen


Antwoord 5

import java.util.Scanner;
public class Solution {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int i = scan.nextInt();
        Double d = scan.nextDouble();
        scan.nextLine();
        String s = scan.nextLine();
        System.out.println("String: " + s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);
    }
}

Other episodes