2013-05-05 23 views
-1

我正在用Java編碼一個基本的telnet服務器,我想處理由'\ b'表示的退格終端控制字符。 退格字符刪除/刪除字符串中的前一個字符。如何在Java中處理退格終端控制字符?

我目前使用下面的示例方法來成功實現這一點,但沒有人知道更清潔/更有效的方法嗎?

非常感謝您提供的任何幫助。

/* 
Example input: 
"This is a dog\b\b\bcat" 
"\b\b\bThis is x\b a cat" 
"\b\b\bThis\b\b\bThis is a dog\b\b\bcat" 
*/ 

    private String processBackspace(String input) 
    { 
     StringBuilder output = new StringBuilder(); 
     int backSpaceCount = 0, index = 0; 
     boolean isBackSpace = false; 

     for (int i = input.length() - 1; i >= 0; i--) 
     { 
      char c = input.charAt(i); 
      if (c == '\b') 
      { 
       isBackSpace = true; 
       backSpaceCount++; 
      } 
      else 
       isBackSpace = false; 

      if (!isBackSpace) 
      { 
       index = i - backSpaceCount; 
       if (index >= 0) 
        output.append(input.charAt(index)); 
      } 
     }   
     output.reverse(); 
     return output.toString(); 
    } 
+0

代碼審查的問題真的不適合堆棧溢出問題的標準。也許你應該嘗試http://codereview.stackexchange.com?我已經投票結束了「脫離主題」。 – 2013-05-05 06:11:25

回答

2

我會做這樣的

private String processBackspace(String input) { 
    StringBuilder sb = new StringBuilder(); 
    for (char c : input.toCharArray()) { 
     if (c == '\b') { 
      if (sb.length() > 0) { 
       sb.deleteCharAt(sb.length() - 1); 
      } 
     } else { 
      sb.append(c); 
     } 
    } 
    return sb.toString(); 
} 
+0

啊,這更優雅 - 謝謝 – Fade 2013-05-05 06:27:05