Три последовательных пробела, разделенные пробелом, дадут вам две пустые строки (пустую строку между первым и вторым последовательными пробелами плюс строку между вторым и третьим последовательными пробелами).
Вам нужно либо изменить способ кодирования пространств сообщений, либо обработать эти две последовательные пустые строки. Предполагая, что вы не можете изменить кодировку сообщений и пробелы всегда идут отдельно (разделитель букв) или на три (кодированный пробел), будет работать следующее:
String code=".... . -.-- .--- ..- -.. ."; //Decodes to "HEY JUDE"
Iterator<String> letters = Arrays.asList(code.split(" ")).iterator();
StringBuilder res = new StringBuilder();
while(letters.hasNext()) {
String current = letters.next();
if (! "".equals(current)) { // we have a letter
res.append(MorseCode.get(current));
} else { // we have an empty string, the first of two which represent a space
res.append(" ");
letters.next(); // we skip the next item which will be an empty string
}
}
System.out.println(res);
Вы можете попробовать здесь (с буквой, представленной как x
, поскольку у меня нет вашего класса MorseCode).