java числа из интервала 1-26 заменить на маленькие буквы латинского алфавита

Числа, которые нужно преобразовать в буквы, отделены от остальных символов пробелом, пробелы, которые находятся между заменяемыми числами нужно удалить, символы которые отличаются от чисел не изменять.

Пример:

  • 1 8 11 , 26 ! b20 -> ahk,z! b20

  • a 14 2 10 -> anbj

Как реализовать?


Ответы (1 шт):

Автор решения: insolor

В общем, такой код получился:

private static String convert(String text) {
    StringBuilder result = new StringBuilder();
    boolean prevNotNumber = false;  // Переменная-флаг, где будем хранить, был ли предыдущий элемент числом
    for(String part: text.split(" ")) {
        try {
            int number = Integer.parseInt(part);
            // Из номера буквы получаем саму букву - для этого получаем код буквы 'a',
            // прибавляем номер буквы минус 1 (для буквы a номер будет 1, а чтобы из кода буквы a получить код a, нужно прибавлять 0),
            // потом код буквы приводим опять к символьному типу
            char c = (char)((int)'a' + number - 1);
            result.append(c);
            prevNotNumber = false;
        } catch (NumberFormatException ex) {
            // Текущий элемент не число, и предыдущий элемент не число - добавляем между ними пробел
            if (prevNotNumber) {  
                result.append(" ");
            }
            result.append(part);
            prevNotNumber = true;
        }
    }
    return result.toString();
}

public static void main(String[] args) {
    System.out.println(convert("1 8 11 , 26 ! b20"));
    System.out.println(convert("a 14 2 10"));
}

Результат:

ahk,z! b20
anbj
→ Ссылка