2013-05-05 2 views
-1

Я кодирую базовый сервер telnet в Java, и я хотел бы обработать управляющий символ терминала backspace, обозначенный '\ b'. Символ обратного пробела удаляет/удаляет предшествующий символ в строке.Как обрабатывать символ управления терминалом backspace в 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? Я проголосовал за закрытие как «вне темы». –

ответ

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

Смежные вопросы