циклические перестановки строк

 String str_ = "abcd";
        for(int n1=0;n1<str_.length();n1++) {
            String result = str_.substring(n1) + str_.substring(0, n1);
            System.out.println(result);
        }

Написал программу для циклической перестановки строк с помощью метода substr. Пытаюсь написать без этого метода с помощью методов для Char. Не очень получается. Как это можно по-другому написать для массива символов или просто проходя по каждому символу строки, например?


Ответы (2 шт):

Автор решения: Nowhere Man

Можно использовать StringBuilder / StringBuffer, которые позволяют модифицировать строку-содержимое:

String str = "abcd";
int n = str.length();

StringBuilder sb = new StringBuilder(str);
for (int i = 0;  i < n; i++) {
    sb.append(sb.charAt(0)).deleteCharAt(0);
    System.out.println(new String(sb.toString()));
}

Вывод:

bcda
cdab
dabc
abcd

Аналогично, можно сдвигать циклически элементы в массиве символов, полученных из данной строки:

char[] c = str.toCharArray();

for (int i = 0;  i < n; i++) {
    char first = c[0];
    for (int j = 1; j < n; j++) {
        c[j - 1] = c[j];
    }
    c[n - 1] = first;
    System.out.println(new String(c));
}
→ Ссылка
Автор решения: tym32167

Можно просто использовать остаток от деления. Пример

public static void main(String[] args) {
    String str = "abcdef";

    StringBuilder shifted = new StringBuilder(str.length());

    int shift = 2;
    for(int i=0; i<str.length(); i++)
    {
        int ind = (i + shift) % str.length();
        shifted.append(str.charAt(ind));
    }

    System.out.println(shifted.toString());
}

Вывод

cdefab

Меняем формулу сдвига в обратную сторону

int ind = (str.length() + i - shift) % str.length();

Вывод

efabcd
→ Ссылка