Я пытаюсь решить задачу с условным названием KeyboardSwitch, что означает переключение клавиатуры и перевод текста в нужный язык (если забыл переключить клавиатуру и напечатал другим языком). Но в коде возникает ошибка, которую мне не удаётся исправить.
Ошибка находится в строке №11, нужно правильно ввести в качестве параметра функцию Function<> fromTo из метода "private static String convert ". Т.е. у меня вопрос по синтаксису, как правильно ввести этот параметр. Я, к сожалению, пока не изучил как вызвать Function<> fromTo в качестве параметра метода, и в интернете тоже пока не нашёл ответ. Буду очень благодарен, если кто-то подскажет, как исправить этот фрагмент кода.
import java.util.function.Function;
public class MainTask {
public static void main(String[] args) {
System.out.println("Задание: \nСоздайте класс KeyboardSwitch. Его конструктор принимает строку и внутри " +
"него происходит \nперевод текста в нужный язык(забыл переключить клавиатуру и напечатал другим " +
"языком)");
KeyboardSwitch kSwitch = new KeyboardSwitch();
kSwitch.enToRu("привет");
kSwitch.convert("привет", "привет", "ghbdtn");
}
}
class KeyboardSwitch {
public static String enToRu(String str) {
return convert(str, KeyboardSwitch::enToRu);
}
private static String convert(String str, Function<Character, Character> fromTo) {
if (null == str || str.isEmpty()) {
return str;
}
int n = str.length();
StringBuilder sb = new StringBuilder(n); // зарезервировать емкость как у начальной строки
for (int i = 0; i < n; i++) {
sb.append(fromTo.apply(str.charAt(i))); // добавить перекодированный символ, вызвав соответствующий метод
}
return sb.toString();
}
private static char enToRu(char c) {
boolean upper = Character.isUpperCase(c);
char letter = switch (Character.toLowerCase(c)) {
case 'f' -> 'а'; case ',' -> 'б'; case 'd' -> 'в'; case 'u' -> 'г'; case 'l' -> 'д'; case 't' -> 'е';
case '`' -> 'ё'; case ';' -> 'ж'; case 'p' -> 'з'; case 'b' -> 'и'; case 'q' -> 'й'; case 'r' -> 'к';
case 'k' -> 'л'; case 'v' -> 'м'; case 'y' -> 'н'; case 'j' -> 'о'; case 'g' -> 'п'; case 'h' -> 'р';
case 'c' -> 'с'; case 'n' -> 'т'; case 'e' -> 'у'; case 'a' -> 'ф'; case '[' -> 'х'; case 'w' -> 'ц';
case 'x' -> 'ч'; case 'i' -> 'ш'; case 'o' -> 'щ'; case ']' -> 'ъ'; case 's' -> 'ы'; case 'm' -> 'ь';
case '\'' -> 'э'; case '.' -> 'ю'; case 'z' -> 'я';
case '<' -> 'Б'; case '~' -> 'Ё'; case ':' -> 'Ж'; case '{' -> 'Х'; case '}' -> 'Ъ'; case '"' -> 'Э';
case '>' -> 'Ю';
default -> c;
};
return upper ? Character.toUpperCase(letter) : letter;
}
}