Заменить все руссские символы на английские и наоборот
Вопрос такой как перебрать в одном слове все похожие буквы из русского алфавита и английского например есть слово джава его можно написать как джaва и джавa и джaвa (жирным курсивом выделены буквы из латинского алфавита), как сделать чтобы это делало само? Пытался что то сделать но заменяет все символы
Ответы (1 шт):
Создаем HashMap из необходимых замен:
Map<Character, Character> substitutions = new HashMap<>();
substitutions.put('а', 'A');
substitutions.put('е', 'E');
substitutions.put('р', 'P');
Считаем количество букв count, которые нужно заменить в исходной строке input:
String input = "привет";
int count = 0;
for (char character : input.toCharArray()) {
if (substitutions.containsKey(character)) {
count += 1;
}
}
Генерируем список всех возможных комбинаций binaryStrings в бинарном представлении. Попутно дополняем строки недостающими нулями:
List<String> binaryStrings = new ArrayList<>();
long pow = (long) Math.pow(2, count);
for (long i = 0; i < pow; i++) {
String binaryString = Long.toBinaryString(i);
char[] leadingZeros = new char[count - binaryString.length()];
Arrays.fill(leadingZeros, '0');
binaryStrings.add(String.valueOf(leadingZeros) + binaryString);
}
// binaryStrings на выходе будет списком из строк:
// ["00", "01", "10", "11"]
Наконец, делаем необходимые замены, каждому элементу списка binaryStrings сопоставляем новую строку. Символ '0' в binaryString соответствует тому, что замену делать не нужно, а символ '1' означает, что нужно сделать замену на символ в соответствии с substitutions:
List<String> outputList = new ArrayList<>();
for (String binaryString : binaryStrings) {
char[] binaryCharArray = binaryString.toCharArray();
StringBuilder output = new StringBuilder();
int index = 0;
for (char character : input.toCharArray()) {
if (substitutions.containsKey(character)) {
if (binaryCharArray[index] == '0') {
output.append(character);
} else {
output.append(substitutions.get(character));
}
index++;
} else {
output.append(character);
}
}
outputList.add(output.toString());
}
// outputList на выходе будет содержать все возможные комбинации замен:
// ["привет", "привEт", "пPивет", "пPивEт"]