2011-10-30 9 views
12

現在のプログラムでは、製品の説明をString入力として入力するように求めています。しかし、後でこの情報を印刷しようとすると、Stringの最初の単語だけが表示されます。これの原因は何でしょうか?次のように私の方法は次のとおりです。スキャナは行の代わりに最初の単語のみを読み込みます

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は唯一の「スパークリング」を得られます。

ご協力いただきますようお願い申し上げます。

答えて

27

nextLine()next()を置き換えます

String productDescription = input.nextLine(); 
+5

あなたは私を打つ、8秒+1 –

+0

素晴らしい。どうもありがとう!これは働いた:) – Kristian

8

代わりinput.next();

+0

ありがとう。これは魅力的に機能しました:) – Kristian

3

の使用input.nextLine();javadocs for Scannerれ、あなたの質問

スキャナは、区切り文字パターンを使用してトークンにその入力を破るに答える デフォルトで空白にマッチします。

あなたは

Scanner s = new Scanner(); 
s.useDelimiter("\n"); 
+2

nextLine()がこのような状況のために特別に書かれていて、すべてきちんと解決すると、なぜそれが乱れますか? –

1

input.next(のようなものを実行してスキャナが使用されているデフォルトの空白のパターンを変更する場合があります)は、入力文字列の最初のwhitsepace区切りの単語になります。それで、それはあなたが説明したことを設計によって行います。試してくださいinput.nextLine()。救助へ

+0

ありがとう!それは今働いた:) – Kristian

1

Javadoc

Aスキャナは

nextLine空白デフォルトの試合で、おそらくあなたが使用すべき方法である 、区切り文字パターンを使用してトークンにその入力を破ります。

関連する問題