2012-03-16 30 views
0

「この文字列を比較するにはどうすればよいですか」という質問には何百万という答えがありますが、私は問題を解決するために多くのことを研究していますが、 ...文字列の比較 - Java

ネットワーク上のチャットサーバーとクライアントをjavaで作成しています。これはDatagramSocketsを使用してudp上で実行されます(tcp上のストリームははるかに意味があります)。ユーザーがexitと入力すると、チャットプログラムを終了する方法があります。ユーザの入力を得るために、getter.getMessagegetMessageというメソッドで宣言したScannerを使用しています。ここで私は今働いているコードは次のとおりです。

getter.getMessage(); 
String pTest = getter.smessage; 
if(pTest.equals("exit")) { 
    System.out.println("System going offline"); 
    getter.isOn = false; 
} 

これは、ユーザーの入力が終了した場合でも、私のwhileループの周りに毎回無視します。

if(getter.message.toLowerCase().Equals("exit") { 
    //blah 
} 

私はもともとString pTestにgetter.messageを入れないでしようとしたが、それだけでは動作したくない:私も試してみました。私はここで間違って何をしていますか?あなたは"exit"を期待しているときに(trim()を呼び出した後10)11個の文字を受けていることをコメントで述べた

if ("exit".equalsIgnoreCase(getter.message.trim())) { 
    . . . 
} 

EDIT

+0

これをデバッグする必要があります。 getMessage()を呼び出す前と後にgetter.smessageを出力して、実際に動作するかどうかを確認します。たぶん、あなたがトリミングしたい後続のwithspaceがありますか? – Thilo

+4

多分smessageに改行が含まれていますか?その場合は "exit \ n" .equals( "exit") 'はfalseを返します。 –

+0

また、ヌルポインタ例外を避けるためには、" exit ".equals(pTest)'を実行するのが最善です。 –

答えて

3

はこれを試してみてください。これは、データとのエンコーディングの不一致があることを示しています。サーバーが最初にバイトオーダーマーク付きのUTF-16データを送信している可能性があります。これは、バイト数を説明します。プラットフォームのデフォルトエンコーディング(通常はISO-8859-1またはUTF-8)を使用してそれを読み取る場合は、各バイトを文字に変換して、"exit"と決して一致しません。あなたは一致させるためにエンコーディングの両側を取得する必要があります。

データの送信に使用されたエンコーディングがわかったら、文字エンコーディングを使用するコンストラクタを使用してScannerを作成します。たとえば、次のようになります。

Scanner scanner = new Scanner(inputStream, "UTF-16"); 
+0

+1。私は見た目の周りのこれとは反対にこれを好む。私は本当に他の理由を知らない。 – Jon

+0

OK私が知っている限り、両者は同じマシン上で実行されているのと同じエンコーディングを使用する必要があります。他のコーディングを使用する場所は宣言されていません。クライアント側のペーストビン。 – Charlie

+0

http://pastebin.com/ DvsGAmb0 – Charlie

1

白い空白の問題が考えられます。次のコードを試してください。

if (getter.message.toLowerCase().trim().Equals("exit")) 
{ 
    //blah 
} 
+0

pTestが終了するはずですが、trim()を使用するとサイズが10となっています... – Charlie

0

getter.messageが何かを返すと仮定しています。 getter.messageから返されたStringの長さをチェックしようとしましたか?

私はこのようなことを試みたことはありませんでしたが、AJAXで同様の問題に直面しました。サーバーから返されたStringの長さは、比較していたStringよりも大きかった。そして、私は比較の前に不要なスペースを取り除かなければならなかった。

+0

pTestを終了してもtrim()を使用するとサイズが10となっています。 – Charlie