2015-02-14 2 views
-1

Я сделал хороший прорыв с моим переводчиком Morse Code с помощью вас, но проблема с пробелами все еще есть, если в тексте есть неизвестный символ.Удаление пропусков в морском кодировщике

Это метод я использую для перевода один символ в коде Морзе, а не с помощью HashMaps

public String getMorseCode(char c) { 
    char cUpper = Character.toUpperCase(c); 
    if (charMap.containsKey(cUpper)) { 
     return charMap.get(cUpper); 
    } else { 
     final String emptyString = ""; 
     return emptyString; 
    } 
} 

Используя этот метод, я перевести текст на азбуку Морзе, используя метод кодирования (нет проблем с этим!):

public String encode(String text) { 
    StringBuilder sb1 = new StringBuilder(); 
    int i = 0; 
    while (i < text.length()) { 
     char c = text.charAt(i); 
     if (c == ' ') { 
      sb1.append("/"); 
      i++; 
     } else { 
      i = i + 1; 
      sb1.append(getMorseCode(c)); 
     } 
     sb1.append("*"); 
    } 
    return sb1.toString().trim(); 
} 

Пробелы до и после предложения удаляются через .trim(). В morsecode между словами есть 3 пробела, между пробелами chars 1. Если в тексте есть неизвестный символ, то после него должна быть пустая строка ("") без пробелов. Я изменяю пробелы в методе в/и *, чтобы увидеть, как все меняется, но по-прежнему остается той же проблемой.

Я просто не знаю, как изменить свой код, чтобы это произошло! Заранее благодарим за помощь!

ответ

1

Вам нужно проверить, вернула ли вы пустую строку или нет. Только если он не пуст, вы добавляете пробелы.

while (i < text.length()) { 
    char c = text.charAt(i); 
    i++; 
    if (c == ' ') { 
     sb1.append("/"); 
    } else { 
     String code = getMorseCode(c); 
     if (! code.equals("")) { 
      sb1.append(code); 
      sb1.append('*'); 
     } 
    } 
} 

КСТАТИ for цикл может быть более подходящим, чем while здесь, так как вы обрабатываете все символы в последовательности ..