2

私のサーバークラスのメインメソッドにはif、チャットプログラムの予約済みキーワードの一連のステートメントがあり、メソッドとともに変数の値を使用してトラバースしようとしています.equalsIgnoreCaseelse問題は、変数が特定の値を保持していても、プログラムを実行すると、変数と条件の 1 つが完全に一致していても、コードが常に節にステップインするifことです。コードは正常にコンパイルされますが、なぜこれが起こっているのかわかりません。if変数が正しい値を保持していることを確認するために、ステートメントを開始する直前に変数の値を出力しました。私のコードのスニペットを以下に示します。

System.out.println("Keyword is : " + keyword);
if (keyword.equalsIgnoreCase("who")) 
{  
  System.out.println("calling who function");
  whoFunction(address, socket, port);
} 
else if (keyword.equalsIgnoreCase("whoami")) 
{ 
  whoami(address, socket, port, clientAddress);
} 
else if (keyword.equalsIgnoreCase("all")) 
{   
  all(message);
} 
else if (keyword.equalsIgnoreCase("Bye")) 
{
  bye(address, socket, port, clientAddress);
} 
else 
{     
  newUser(keyword, address, searchListLength, clientAddress, port);
}

キーワードの値に関係なく、常に最後の else ステートメントを選択します。ご覧のとおり、これにより、常に自分のnewUserクラスを呼び出すことになります。ここで何か不足していますか?おそらく私の顔をじっと見つめている :/

4

3 に答える 3

7

keyword文字列に末尾の改行/スペースやその他の印刷できない文字が含まれていないことを確認しますか?

于 2012-07-23T01:37:57.207 に答える
6

入力に先頭/末尾のスペースが含まれている可能性があり、これにより不一致が発生します。

このステートメントを上部に追加してみてください。

keyword = keyword.trim();
于 2012-07-23T01:38:21.683 に答える
0

コレーターも参照

Collat​​or クラスは、ロケールに依存した文字列比較を実行します。このクラスを使用して、自然言語テキストの検索およびソート ルーチンを作成します。

于 2017-05-29T09:31:38.557 に答える