0

以下のコードは、ほとんど自明です。ただし、次の 2 つの場合に問題が発生します。

  1. コマンドラインを空白のままにしても、whileループは終了しません。

  2. 入力が「テスト」であるはずtest t1の変数である場合( を使用)はそれを行いますが、何らかの理由 でまだ条件に入りません。keySystem.out.println(key)if

    String[] broken_text = null; String text = "";
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    while((text = reader.readLine()) != null) {     
      broken_text =    text.split(" ");
      String first_key = broken_text[0];    
      if (first_key == "test") {
            //some statements    
       }
    }
    

なぜこれが起こっているのかわかりません。同じことに関する助けがあれば大歓迎です。

4

4 に答える 4

3

equals() を使用して、文字列が等しいかどうかをチェックします。

if (first_key == "test") {
         //some statements
    }

should be

if (first_key.equals("test")) {
         //some statements
    }

あなたはそれを宣言したので、あなたtextは決してなりませんnull

String text = "";

したがって、 while ループは無限ループになります

変化する

String text = ""; 
to
String text = null;

text=""または、文字列を空の文字列のままにしたい場合。

使用する

while(!(text = reader.readLine()).isEmpty()) 
于 2012-11-05T23:43:07.777 に答える
1

readLine()空白行はではなく空の文字列を返すため、ループは終了しませんnull

equals()文字列はnotと比較する必要があるため、比較は失敗します==

于 2012-11-05T23:44:38.677 に答える
1

この場合String textは決してありませんnull。以下を使用できます。

while (!(text = reader.readLine()).isEmpty()) {
于 2012-11-05T23:45:33.207 に答える
0

これは編集されたコードである必要があります。

String[] broken_text = null;
String text = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

while((text = reader.readLine()) != null && !text.isEmpty()) {
    broken_text = text.split(" ");
    String first_key = broken_text[0];
    if ( "test".equals(first_key)) {
         //some statements
    }
}

に変更(text = reader.readLine()) != nullした(text = reader.readLine()) != null && !text.isEmpty()理由は、最初の文字としてファイルの終わりに遭遇した場合に戻り、最初の文字が (キャリッジ リターン)、(ライン フィード)、または (キャリッジ リターン) に遭遇した場合に "" (空の文字列) をreadLine()返すためです。その後に改行が続きます)。また、 をチェックする前に、常に をチェックする必要があります。null\r\n\r\nnullisEmpty()

unix / Linuxコンソールではエンドオブファイルで[ctrl][d]あり、DOSでは[ctrl][z]

注: コンソールではなくファイル (ファイルの終わりを取得する可能性が高い場所) から入力を読み取りたい場合は、次のreaderように初期化されます。

    BufferedReader reader = new BufferedReader(new FileReader("d:\\a1.txt"));

(入力データがファイル"d:\a1.txt"にあると仮定します。)

于 2012-11-06T05:12:13.673 に答える