2012-07-16 65 views
4

我的應用程序使用套接字連接到服務器和讀取數據。數據最多隻有四個字符,但偶爾會少於這個數字。該數據由一個CR LF組合,我不想存在用於處理的下一個步驟追加。如何檢測和一個char []替換換行符?

因爲我從來沒有想讀超過四個大字,我有一個char[4]緩衝。然後,考慮到當數據小於4個字符的時間(和CR和LF字符蠕變),我有這:

for(int i = 0; i < 4; i++) { 
    String hexString = Integer.toHexString(buffer[i] | 0x10000).substring(1); 
    if((hexString == "000d") || (hexString == "000a")) { 
     buffer[i]='0'; 
    } 
} 

隨着明智日誌記錄,我可以看到環路按預期執行但不覆蓋CR(U + 000d)和LF(U + 000a)字符。我期望上面的代碼來替換回車的任何實例或具有「0」換行,但該緩衝器的內容不會出現變化。

老實說這種感覺就像反正這樣做的一個笨拙的方式,所以我的問題分叉:

  1. 什麼是錯我的代碼?我如何解決它按預期執行?
  2. 是否有這樣做的更好的辦法?
+0

比較字符的十六進制值似乎是一個尷尬和容易出錯的方式來做到這一點。你有沒有檢查過你的'if'語句是否真的被換行符滿足了? – Edward 2012-07-16 16:22:31

+1

既然你已經有了一個很好的答案,我會在爲什麼你的代碼不工作只是發表評論。你不能用==來比較字符串,因爲比較字符串是否是實際相同的實例。用.equals代替你的代碼至少應該可以工作。 – 2012-07-16 17:31:01

+0

@RogerLindsjö謝謝你。有點反直覺,但是當你考慮它時它是有意義的。 – 2012-07-18 12:44:05

回答

4

聽起來好像你會更好使用BufferedReader及其readLine()方法入手:

BufferedReader reader = new BufferedReader(new InputStreamReader(stream, charset)); 
try { 
    String line; 
    while ((line = reader.readLine()) != null) { 
     processLine(line); 
    } 
} finally { 
    reader.close(); 
} 

的線條在這裏不會有行分隔符的,而你並不需要擔心是否一個電話read結束了通過一條線的一半等。

+0

感謝喬恩 - 這確實有更多的意義。 – 2012-07-16 16:21:56