@Roktober
Люблю Linux && Python

Изменение английских букв «с», «а», «е», «у», «к», «o», «p», «x» на русские в составе слова?

Изменение английских букв «с», «а», «е», «у», «к», «o», «p», «x» на русские в составе слова
Хотелось бы найти красивое решение данного вопроса
Пока приходит в голову обычным реплейсом
Очень важна скорость работы
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
@koperagen
import java.util.Map;

public class Converter {
    static final Map<Character, Character> map = Map.of('y', 'у', 'c', 'с', 'x', 'х', 'a', 'a'); // Дополнить

    public static String replaceSymbols(String string, Map<Character, Character> map) {
        final var sb = new StringBuilder(string.length());
        for (int i = 0; i < string.length(); i++) {
            sb.append(map.getOrDefault(string.charAt(i), string.charAt(i)));
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        System.out.println(replaceSymbols("yxcayxcattttt", map)); // ухсaухсattttt
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Красивое и быстрое - обычно антогонизмы. Быстрое решение будет StringBuilder с указанием прогнозируемого размера результирующей строки в конструкторе. Это будет почти самое быстрое решение. Но оно будет иметь явный цикл. А это некрасиво. Красивое-же содержит просто вызов StringUtils.replace(....) или нечто в этом роде. Но не факт что оно - самое быстрое.
Ответ написан
Комментировать
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
У меня есть небольшой скрипт, который я использую при транслитерации кириллических символов в латиницу для URL. Если его модифицировать под вашу задачу (просто удалить лишнее), то получится, то что вы хотите

public String cyrToLat(String message) {
    char[] abcCyr = {
            'а', 'б', 'в', 'г', 'д',
            'е', 'ё', 'ж', 'з', 'и', 'й',
            'к', 'л', 'м', 'н', 'о', 'п', 'р',
            'с', 'т', 'у', 'ф', 'х', 'ц', 'ч',
            'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я',

            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
            'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
            's', 't', 'u', 'v', 'w', 'x', 'y', 'z',

            ' ', '.', '№', ',', '-', '_'

    };
    String[] abcLat = {
            "a", "b", "v", "g", "d", "e", "e",
            "zh", "z", "i", "y", "k", "l", "m", "n",
            "o", "p", "r", "s", "t", "u", "f", "h",
            "ts", "ch", "sh", "sch", "", "i", "",
            "e", "ju", "ja",

            "a", "b", "c", "d", "e", "f", "g", "h",
            "i", "j", "k", "l", "m", "n", "o", "p",
            "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",

            "-", "-", "no", "-", "-", "_"

    };
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < message.length(); i++) {
        for (int x = 0; x < abcCyr.length; x++) {
            if (message.charAt(i) == abcCyr[x]) {
                builder.append(abcLat[x]);
            }
        }
    }

    return builder.toString();
    
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽