Задача:
Зашифровать произвольный открытый текст над латинским алфавитом с помощью шифра однобуквенной замены
Код:
String str = "BE_HAPPY";
String[] bytes = new String[] { "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", " " };
int[] key = new int[] { 18, 22, 11, 7, 15, 19, 1, 23, 20, 26, 3, 14, 25, 4, 9, 5, 2, 24, 21, 6, 0, 8, 13, 12, 16, 10, 17 };
String a = "";
String m = "";
for (String ma : str.split("")) {
m = m + bytes[key[Arrays.asList(bytes).indexOf(ma)]];
}
System.out.print(m);
Ошибка:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 at L5.lab5.main(lab5.java:24)
Что делать?
в массиве bytes нет символа подчеркивания, поэтому Arrays.asList(bytes).indexOf(ma) возвращает -1. После попытки обратиться к -1 элементу массива key выбрасывает java.lang.ArrayIndexOutOfBoundsException: -1
Как уже было сказано, проблема в символе _, для которого нет соответствия в "таблице шифрования".
Позволю себе предположить, что символы, которых нет в "таблице шифрования", должны оставаться в первозданном виде. Тогда, с учетом небольшой оптимизации, код может выглядеть так:
String str = "BE_HAPPY";
Character[] chars = new Character[] { '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', ' ' };
List<Character> charsList = Arrays.asList(chars);
int[] key = new int[] { 18, 22, 11, 7, 15, 19, 1, 23, 20, 26, 3, 14, 25, 4, 9, 5, 2, 24, 21, 6, 0, 8, 13, 12, 16, 10, 17 };
StringBuilder sb = new StringBuilder(str.length());
for (char ch : str.toCharArray())
{
int charIndex = charsList.indexOf(ch);
char resultChar = charIndex >= 0 ? chars[key[charIndex]] : ch;
sb.append(resultChar);
}
System.out.println(sb.toString()); //WP_XSFFQ
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники