Простейшая кодировка букв

218
02 июня 2018, 15:00

Пишу прогу, которая принимает строку(только буквы, никаких знаков препинания и цифр) и целое число, насколько передвинуть символы сроки по ASCII таблице. Ничего сложного. Но! Также нельзя, чтобы в результате использовались цифры и прочие знаки препинания. Например,
дана "XYZ" и ее нужно передвинуть на 3 символа= "ABC", а не "[/]" "xYZ" = "aBC", а не "{/]" т.е. алфавит должен идти "колесом" :

То же касается и прописных букв.

Прошу дать совет или напутствие, как подойди к решению!
Сделал пока вот :

  public class Coder {
    String  ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    String abc = "abcdefghijklmnopqrstuvwxyz";
      public String coding(String gap, int n){
          String output="";
          for (int i = 0; i < gap.length(); i++) {
              char c = gap.charAt(i);
              c+=n;
              output+=c;
          }
          return output;
      }
}
Answer 1

Попробуйте вот так

String abc = "abcdefghijklmnopqrstuvwxyz";
public String coding(String gap, int n) {
    String output = "";
    for (int i = 0; i < gap.length(); i++) {
        //Получаем тек. букву
        String currentLetter = gap.substring(i, i + 1);
        //получаем её индекс
        int indexOf = abc.indexOf(currentLetter.toLowerCase());
        //считаем индекс с учяетом смещения
        int nextIndex = getNextIndex(indexOf, n);
        //получаем букву со смещением
        String cryptedLetter = abc.substring(nextIndex, nextIndex + 1);
        //добавляем в выходное значение
        output
                += //если тек. буква равна ей же в нижнем регистре
                (currentLetter.equals(currentLetter.toLowerCase()))
                //пишем как есть
                ? cryptedLetter
                //иначе получается, что изначально буква была в верхнем регистре
                : cryptedLetter.toUpperCase();
    }
    return output;
}
public int getNextIndex(int curr, int offset) {
    //Если тек. индекс + смещение не превышаем длинну строки
    return (curr + offset <= abc.length() - 1)
            //так и оставляем
            ? curr + offset
            //иначе расчитываем смещение
            : (curr + offset) - abc.length() - 1;
}

Или как советовал в комментариях Mike

public String coding(String gap, int n) {
        String output = "";
        for (int i = 0; i < gap.length(); i++) {
            char charAt = gap.charAt(i);
            if (charAt >= 65 && charAt <= 90) {
                output += (char) (((charAt - 65 + n) % 26) + 65);
            } else if (charAt >= 97 && charAt <= 122) {
                output += (char) (((charAt - 97 + n) % 26) + 97);
            }
        }
        return output;
    }
READ ALSO
Как создать SSL соединение к postgresql из Java swing?

Как создать SSL соединение к postgresql из Java swing?

Как создать SSL соединение к postgresql из Java swing?

206
Обработка динамического JSON в Retrofit2

Обработка динамического JSON в Retrofit2

Имеется метод в сервисе:

186
Java.TableView.Как включить выделение строк

Java.TableView.Как включить выделение строк

Как включить выделение строк в TableViewПри нажатии мышкой на строку она не выделяется

136
Как и чем парсить Json на Java?

Как и чем парсить Json на Java?

Часто возникает потребность работы с Json, в частности его чтения и парсингаВ Java обычно ты знаешь с каким типом переменных работаешь, а при...

222