Пишу прогу, которая принимает строку(только буквы, никаких знаков препинания и цифр) и целое число, насколько передвинуть символы сроки по 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;
}
}
Попробуйте вот так
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;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как создать SSL соединение к postgresql из Java swing?
Как включить выделение строк в TableViewПри нажатии мышкой на строку она не выделяется
Часто возникает потребность работы с Json, в частности его чтения и парсингаВ Java обычно ты знаешь с каким типом переменных работаешь, а при...