2011-02-11 29 views
0

私はクライアント/サーバアプリケーションを作成しています。いくつかのStringフィールドを持つMessageクラスがあります。文字配列内の特殊文字を特定します

public char[] toArrayOfChar() 
{ 
    String str = ""; 
    char[] charr; 
    str += from; 
    str += "\r\n"; 
    str += to; 
    str += "\r\n"; 
    str += header; 
    str += "\r\n"; 
    str += body; 
    str += "\r\n"; 
    str += header; 
    str += "\r\n"; 
    charr = str.toCharArray(); 

    return charr; 
} 

は、今私は、各フィールドを分離して、私はクライアントからサーバにそれを送信した後の文字列に変換したい:私は、char []これらのフィールドのを返すために、次の方法を書かれています。各フィールドの終わりに改行文字と改行文字を識別するにはどうすればよいですか?

+0

StringTokenizerが役立ちます。しかし、もっと良い方法があるかもしれません。 – Mikel

+0

++ StringTokenizer、またはmastaを感じている場合は、regExも動作します。私はちょうど\ nを使い、分割するのが最も簡単なのですが、 – bestsss

答えて

2

を使用して読み取ることができ、これらのクラスを使用して、良い答えが与えられますが、あなたのコードのスタイルについてされています:

複数のString + =呼び出しを使用するのはひどく非効率です。ここにははるかに効率的なバージョンがあります。

まずCR + LFのための定数を定義します。

private static final String CRLF = "\r\n"; 

を次のように、Stringを構築するためにStringBuilderを使用します。

public char[] toArrayOfChar() 
{ 
    return new StringBuilder() 
     .append(from).append(CRLF) 
     .append(to).append(CRLF) 
     .append(header).append(CRLF) 
     .append(body).append(CRLF) 
     .append(header).append(CRLF) 
     .toString() 
     .toCharArray(); 
} 

これは読みやすく、より効率的である(バージョン+ =呼び出しごとに新しいStringインスタンスを作成する必要があります)。

また、多分あなたは自分のオブジェクトのtoString()メソッドでこのコード(マイナス.toCharArray()ライン)を書いて、char[]を取得するためにthis.toString().toCharArray()を行う必要があります。標準的なメカニズムを利用することは常に良い習慣です。toString()の方法は、create a String representation of the objectです。

2

official trail: Reading from and Writing to Socketsで提案されているように、PrintWriterBufferedReaderクラスを調べることをお勧めします。

あなたは、単に

out.println(from); 
out.println(to); 
out.println(header); 
out.println(body); 

を使用して文字列を送信し、あなたの実際の質問のために

String from = bufferedReader.readLine(); 
String to  = bufferedReader.readLine(); 
String header = bufferedReader.readLine(); 
String body = bufferedReader.readLine(); 
+0

あなたのメソッドははるかに簡単ですが、上記のようにこのメソッドを実行する必要があります。とりあえずありがとう :) –