Как реализовать разбивку на группы букв
я сделал что есть строка которая шифрует текст.
Как сделать чтобы можно разбивку по группам задавал пользователь. То есть захотел на 4 буквы сделал на 4, захотел на 5 то на 5
public class Helper {
private static String getEncryptedStr(String source) {
StringBuilder charBox = new StringBuilder();
for (int i = 0; i < source.length() - 1; i += 2) {
charBox.append(source.charAt(i + 1));
charBox.append(source.charAt(i));
}
return charBox.toString();
}
public static void main(String[] args) {
String ss = "андрей пошёл в магазин"; // исходное сообщение
System.out.println(getEncryptedStr(ss)); // зашифрованное
System.out.println(getEncryptedStr(getEncryptedStr(ss))); // зашифрованное и расшифрованное = исходному
}
}
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
- Убрать все лишние небуквенные символы, например, используя
String::replaceAll, с классом\P{L}, обозначающим все не-буквенные символы`:
String str = "пусть будет так, как мы хотели";
String raw = str.replaceAll("\\P{L}", ""); // пустьбудеттаккакмыхотели
- Перевернуть строку, используя
StringBuilder::reverse:
raw = new StringBuilder(raw).reverse().toString(); // илетохымкаккаттедубьтсуп
- Разбить строку на группы из n символов, используя
String::splitс "магическим" регулярным выражением(?<=\G.{n}), которое обозначает предыдущее совпадение, после которого идут n символов, затем полученный массив можно объединить при помощиString::join:
int n = 4;
String result = String.join(" ", raw.split("(?<=\\G.{" + n +"})"));
// илет охым какк атте дубь тсуп
// илето хымка ккатт едубь тсуп - для n = 5
private static String encrypt(String str, int n) {
String raw = new StringBuilder(str.replaceAll("\\P{L}", ""))
.reverse().toString();
return String.join(" ", raw.split("(?<=\\G.{" + n +"})"));
}