2011-02-11 133 views
0

我正在編寫客戶端/服務器應用程序。我有一個消息類與幾個字符串字段。我寫了下面的方法返回一個char [這些字段]:識別字符數組中的特殊字符

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; 
} 

現在我想每個字段分開,並將其轉換爲字符串我從客戶端發送它的服務器後。如何識別每個字段末尾的回車符和換行符?

+0

StringTokenizer可以提供幫助。但也許有更好的辦法。 – Mikel 2011-02-11 21:04:42

+0

++ StringTokenizer,或者如果您覺得masta regEx也有效。儘管我只是使用\ n並將其拆分爲最簡單的形式 – bestsss 2011-02-11 21:39:43

回答

2

爲您的實際問題看,很好的答案已經給出,但對你的代碼風格:

使用多個String + =調用的效率非常低。這是一個更高效的版本。

首先定義一個常數CR + LF:

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

現在使用StringBuilder打造String,就像這樣:

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實例)。

另外,也許你應該只是寫這個代碼(減去.toCharArray()行)在你的對象的toString()方法和做this.toString().toCharArray()得到char[]。使用標準機制總是一個很好的做法,這就是toString()方法的用法,create a String representation of the object

2

我建議你看看PrintWriterBufferedReader類,如official trail: Reading from and Writing to Sockets中所建議的那樣。使用

這些類,你可以使用

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();