2016-07-22 24 views
1

開始する前に、これは繰り返しの質問ではありません。私はStringTokenzer countTokens() returns 1 with any stringと題された質問を読んだが、それは適切に区切られた文字列が正しく数えられるが、適切に区切られた入力は正しくないという事実に対処していない。countTokens()は常にユーザー入力で1を返します

StringTokenizerクラスを使用すると、countTokensメソッドがcountTokensの引数が定義されたStringかユーザー定義のStringかどうかによって異なる結果が返されることがわかりました。その代わりに)アルファブラボーチャーリーデルタ

Scanner in = new Scanner(System.in); 

String phrase; 

System.out.print("Enter a phrase: "); 

phrase = in.next(); 

StringTokenizer token = new StringTokenizer(phrase); 

int count = token.countTokens(); 

System.out.println(count); 
+0

[docs](https://docs.oracle.com/javase/8/docs/api/java/util/StringTokenizer.html)から)これをスローしてください: "* StringTokenizerは従来のクラスです**互換性のために保持されていますが、新しいコードではその使用が推奨されていません*** "。 'String#split(String)'の使用を検討したいかもしれません。 –

+0

入力を感謝しますが、クラスAssignmentのStringTokenizerクラスを使用する必要があります。 –

答えて

3

使用in.nextLine(たとえば、次のコードでは、値4

String phrase = "Alpha bRaVo Charlie delta"; 

StringTokenizer token = new StringTokenizer(phrase); 
//There's no need to specify the delimiter in the parameters, but I've tried 
//both code examples with " " as the delimiter with identical results 

int count = token.countTokens(); 

System.out.println(count); 

を印刷するが、ユーザが入力したときに、このコードは、値1を出力しますin.next();

+0

それは動作しません。 next()とnextLine()はどちらもString入力を受け入れます。ちょうど私がそれをテストしたことを確認するために。変化なし。nextLine()を使用すると、キーボードバッファの問題が発生します。 –

+1

それは私のために完璧に働いています。 スキャナが新しいスキャナ(System.in)である; 文字列フレーズ。 句= in.nextLine(); StringTokenizerトークン= new StringTokenizer(phrase); int count = token.countTokens(); System.out.println(count); run: Alpha bRaVo Charlie delta BUILD SUCCESSFUL(合計時間:19秒) – beatrice

+0

@CraigK。相違点は 'next()'がスペースに遭遇したときに中断されることです。 'nextLine()'はありません –

0

Scanner in = new Scanner(System.in);

文字列です。

System.out.print( "フレーズを入力してください:");

句= in.nextLine();

System.out.print(phrase);

StringTokenizer token = new StringTokenizer(phrase);

int count = token.countTokens();

System.out.println(count);

フレーズを印刷し、in.next()が "Alpha"を返すことを確認します。

上記のように、in.nextLine()を使用します。

0

代わりに、スキャナの、にInputStreamReaderを使用して試みることができる:スキャナの

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 

String phrase = ""; 

System.out.print("Enter a phrase: "); 

try { 
    phrase = in.readLine(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

StringTokenizer token = new StringTokenizer(phrase); 

int count = token.countTokens(); 

System.out.println(count); 

nextLine()も仕事はしかし、私のために行われました。

デリミタを特にスペース文字にしたい場合、それをStringTokenizerのコンストラクタに渡すことができます。それ以外の場合は "\ t \ n \ r \ f"を使用します(スペース文字を含みますが、たとえば\ n文字もフレーズ内にある場合は期待どおりに機能しない可能性があります)。

0

phraseの値を確認した場合は、in.next()を呼び出した後に「Alpha」と表示されます。定義上、スキャナのnext()は次のトークンを読み取ります。

代わりにin.nextLine()を使用してください。

+0

私はあなたの提案をテストして、next()とnextLine()の違いを見ましたが、特定のアプリケーションでnextLine()を使用すると、ユーザーは文字列を入力することができず、プログラムの終わり。私はhasNextを使ってwhileループを試して、アキュムレータを維持できると思います。 –

+0

私はIDEのためにScannerを使用して入力を読み取る際に同様の問題を抱えていました。 IDEを使用していますか?コマンドラインでプログラムを実行してみてください。 – Kyriakos

+0

私のIDEは本当にバグだったので、私はこの問題を解決しました。 –

関連する問題