2017-01-25 8 views
1

私は、keybordからの読み取り入力のためにstdinとしてScannerクラスを使用しています。 私はトークンによって行の終わりまで文字列を挿入するでしょう。 トークンは空白で区切られます。Java:入力文字列のトークンでトークンを読み取る

これは私のコードです:

Scanner in = new Scanner(System.in); 

    int count=0; 
    while(in.hasNextLine()){ 
     while(in.hasNext()){ 
      String s=in.next(); 
      System.out.println(s); 
      if(s.equals("\n")) 
      break; 
      count++; 
     } 
     break; 
    } 
    System.out.println(count); 

問題は、私はEnterキーを押したときに、それはしばらくブロックから空白とそれのようにそれを考慮すると、決して出るようなので、それは別の入力を期待し続けていることです。

中から出るとLinuxでプログラムを終了する唯一の方法は、CTRL + Dを押すことです(=入力してください)しかし、私は別の方法を探しています...

I挿入しようとしましたifトークンが "\ n"であるかどうかをチェックするが、動作しない文。

問題の解決方法をお探しすることができますか?

+0

プログラムの目標は何ですか? –

+0

申し訳ありませんが、プログラムは文字列内にいくつの単語があるかを数えなければなりません。私は文字列を分割し、配列を入れ、配列の長さを取るような他の方法でもできることを知っていますが、私は.hasNext()メソッドを理解しようとしています... – Jay

答えて

2

in.hasNextLine()およびin.hasNext()メソッドは、ストリームで使用するとブロックします。新しい行または新しいトークンがない場合、何かを書き込んでからEnterキーを再度押すまで待機します。

一つだけの行をしたい場合は、何かのように使用することができます。

package test; 

import java.util.Scanner; 

public class Test { 

    public static void main(String[] args) { 
     int count=0; 
     Scanner in =new Scanner(System.console().readLine()); //scanning just one line 
     while(in.hasNext()){ 
      String s=in.next(); 
      System.out.println(s); 
      count++; 
     } 
     System.out.println(count); 
     in.close(); 
    } 

} 

注: をあなたがIDEからこのコードを実行する場合は、コンソール、System.consoleので、()の戻りnullはありません。コマンドラインから実行するには、次のように入力する必要があります。

$ pwd 
/home/user/development/workspace/test/bin 
$ ls 
test 
$ ls test 
Test.class 
$ java -classpath /home/user/development/workspace/test/bin/ test.Test 
+0

それは私にこの例外を与えます:スレッド "main" java.lang.NullPointerException – Jay

+0

IDEから実行していると思います –

関連する問題