web-dev-qa-db-ja.com

スキャナーは行ではなく最初のWordのみを読み取ります

私の現在のプログラムでは、1つの方法でユーザーにString入力として製品の説明を入力するように求めています。ただし、後でこの情報を印刷しようとすると、Stringの最初のWordのみが表示されます。この原因は何でしょうか?私の方法は次のとおりです。

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

ユーザー入力が「オレンジ風味の炭酸ソーダ」の場合、System.out.printは「Sparkling」のみを生成します。

どんな助けも大歓迎です!

14
Kristian

next()nextLine() に置き換えます:

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

input.nextLine();の代わりにinput.next();を使用します

10
Eng.Fouad

スキャナーのjavadocs 質問に答える

Scannerは、デフォルトで空白に一致する区切り文字パターンを使用して、入力をトークンに分割します。

スキャナーが使用しているデフォルトの空白パターンを変更するには、次のようにします。

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

input.next()は、入力文字列の最初の空白で区切られたWordを受け取ります。そのため、設計上は説明したとおりに動作します。 input.nextLine()を試してください。

1
Cam

Javadoc 救助に:

Scannerは、デフォルトで空白に一致するデリミタパターンを使用して、入力をトークンに分割します

nextLineはおそらくあなたが使用すべきメソッドです。

1
JB Nizet