Как реализовать разбивку на группы букв

Скриня сделал что есть строка которая шифрует текст. Как сделать чтобы можно разбивку по группам задавал пользователь. То есть захотел на 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
  1. Убрать все лишние небуквенные символы, например, используя String::replaceAll, с классом \P{L}, обозначающим все не-буквенные символы`:
String str = "пусть будет так, как мы хотели";
String raw = str.replaceAll("\\P{L}", ""); // пустьбудеттаккакмыхотели
  1. Перевернуть строку, используя StringBuilder::reverse:
raw = new StringBuilder(raw).reverse().toString(); // илетохымкаккаттедубьтсуп
  1. Разбить строку на группы из 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 +"})"));
}
→ Ссылка