web-dev-qa-db-ja.com

Java Scanner String input

イベントクラスを使用するプログラムを作成しています。このクラスには、カレンダーのインスタンスと、String型の説明が含まれています。イベントを作成する方法では、スキャナーを使用して、月、日、年、時間、分、および説明を取り込みます。私が抱えている問題は、Scanner.next()メソッドがスペースの前の最初のWordのみを返すことです。したがって、入力が「私の誕生日」の場合、イベントのそのインスタンスの説明は単に「私の」です。

いくつかの調査を行ったところ、人々はこの問題にScanner.nextLine()を使用していることがわかりましたが、これを試してみると、入力先をスキップします。コードのセクションは次のようになります。

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

そして、これは私が得る出力です:

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

説明文字列を入力するためにスペースをスキップし、その結果、説明(最初は空白スペース-""に設定されます)は変更されません。

どうすれば修正できますか?

19
HolidayTrousers

NextInt()のようなもので年、月、日、時間、分を読み取ると、パーサー/バッファーに残りの行が残されます(空白であっても)、nextLine()を呼び出すと、この最初の行の残りを読み取ります。

次のプロンプトを出力して残りの行を破棄する前に、scan.nextLine()を呼び出すことをお勧めします。

18
Peter Lawrey

nextInt()のようなもので年、月、日、時間、分を読み込むと、パーサー/バッファに残りの行が残ります(空白であっても)ので、nextLine()を呼び出すとこの最初の行の残りを読んでいます。

scan.next()の代わりにscan.nextLine()を使用することをお勧めします。

3
ajas

これを使用して、文字列をスキャンする前に前のキーボードバッファをクリアします。問題を解決しますscanner.nextLine(); //これはキーボードバッファをクリアするためです。

0
Mandeep Tewatia
    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

NextInt()メソッドの直後にnextLine()メソッドを使用する場合、nextInt()は整数トークンを読み取ります。このため、整数入力のその行の最後の改行文字はまだ入力バッファーのキューに入れられ、次のnextLine()は整数行の残り(空)を読み取ります。 readは、空のスペースを別の文字列に読み込むことができます。以下のコードを確認してください。

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);
    }
}
0
Mahendra