циклические перестановки строк
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