CCCPaste

LABA 3 KSIPO t12

package com.pr3.bsbo_08_19.TimofeyKondakov.task12;

import java.util.Scanner;

public class Task12 {
    public static final String ALPH_LOWER = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
    public static final String ALPH_UPPER = "ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";

    public void Ex12() {
//        Реализовать для фрагмента текста шифрование Цезаря (каждый
//        символ в тексте заменить символом, находящимся на некотором
//        постоянном числе позиций левее или правее него в алфавите,
//        например, в слове работа сдвиг на 1 даст “сбвпуб”).

        Scanner in = new Scanner(System.in);

        System.out.println("Enter text: ");

        String str = in.nextLine();

        System.out.println("Enter shift: ");
        int offset = Integer.valueOf(in.nextLine());

        var buffer = new StringBuilder();

        for (var ch : str.toCharArray())
        {
            var alph = Character.isUpperCase(ch) ? ALPH_UPPER : ALPH_LOWER;
            var alphLength = alph.length();
            var indexOfChar = alph.indexOf(ch);

            if (indexOfChar >= 0)
            {
                var newCharIndex = indexOfChar + offset;

                if (newCharIndex < 0)
                {
                    newCharIndex = alphLength + newCharIndex;
                }

                while (newCharIndex >= alphLength)
                    newCharIndex -= alphLength;

                buffer.append(alph.charAt(newCharIndex));
            }
            else
            {
                buffer.append(ch);
            }
        }
        System.out.println(buffer.toString());
    }
}