2011-12-09 13 views
1

内の単語の数が取得できませんそれを文字列に格納した後、その中の単語の数を数えようとしますが、何があっても常に1を返します。は私が成功のように、フレーズ内の単語の数を数えることができる変数

私はstringVariable = scanner.next();で、ユーザー入力を取得し、単語の数を取得するために

int numWords = stringVariable.split(" ").length; 

を使用しています。 「私はテストしています」とタイプしましょう。 1を返します。これはなぜですか?

答えて

10

次の():

検出し、このスキャナから次の完全なトークンを返します。 完全トークンの前に、 区切りパターンと一致する入力が続きます。以前のhasNext()の呼び出しがtrueを返した場合でも、このメソッドは、 スキャンへの入力を待機している間にブロックされる可能性があります。

デフォルトの区切り文字は空白なので、最初の単語だけを読むことになります。したがって、それは1つの単語にしかなりません。 hasNext()(何らかのタイプの終了条件付き)でループ内のすべてのユーザー入力を読み取ってみるか、nextLine()を使用して行全体の値を読み取ります。

4

私はnext()が空白で止まると信じているので、 "I"しか得られません。 scanner.nextLine()を試してみてください。

5

scanner.next()が空白でトークン化しているためです。これに対して、あなたが探しているものは、

scanner.nextLine()です。

public static void main(String[] args) { 

    String input = "I am testing"; 
    Scanner s = new Scanner(input); 
    String stringVariable = s.next(); 
    System.out.println(stringVariable); 
    int numWords = stringVariable.split(" ").length; 
    System.out.println(numWords); 


    s = new Scanner(input); 
    stringVariable = s.nextLine(); 
    System.out.println(stringVariable); 
    numWords = stringVariable.split(" ").length; 
    System.out.println(numWords); 


} 

出力:

私は
私が到達したときに次の()が停止したため、これは常に、1を返します

1
I'm getting user input with a stringVariable = scanner.next(); 

をテストしています空白で。これらのいずれかを使用してください それはあなたを助けるでしょう。すべてのトークン

を読むためにループ内

scanner.nextLine() 
or 
scanner.hasNext(); 

関連する問題