@Vladizzzlove

Какой правильный синтаксис введения в качестве параметра функции Function fromTo?

Я пытаюсь решить задачу с условным названием 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;
    }
}
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ответы на вопрос 1
xez
@xez Куратор тега Java
TL Junior Roo
как правильно ввести этот параметр

Точно так же, как вы его вводите в методе enToRu
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
21 апр. 2024, в 16:51
5000 руб./за проект
21 апр. 2024, в 15:15
15000 руб./за проект
21 апр. 2024, в 15:10
2000 руб./за проект