Перемещение символов внутри строки

String newStr;

public RandomCuriosity(String input){
    newStr = input;
}

public void shiftChars(){
    char[] oldChar = newStr.toCharArray();
    char[] newChar = new char[oldChar.length];
    newChar[0] = oldChar[oldChar.length-1];
    for(int i = 1; i < oldChar.length; i++){
        newChar[i] = oldChar[i-1];
    }
    newStr = String.valueOf(newChar);
}

Я создал метод, который сдвигает символы вперед на один. Например, вход может быть:

вход: Stackoverflow

вывод: wStackoverflo

как я это сделал, я мутировал экземпляр строки. Преобразуйте эту строку в char array (вызывая его oldChar), присвоен последний индекс из oldChar как первый индекс newChar, и сделал for-loop, который взял первый индекс oldChar как второй индекс моего нового Char массив и так далее. Наконец, я преобразовал массив char обратно в строку.

Я чувствую, что сделал слишком много, чтобы что-то сделать очень простой. Существует ли более эффективный способ сделать что-то подобное?

EDIT Спасибо за отличные ответы!

5 ответов


newStr = newStr.charAt(newStr.length() - 1) + newStr.substring(0, newStr.length() - 1);

Вы можете сделать вашу жизнь проще :

public static void main (String[] args) throws java.lang.Exception {
    String input = "Stackoverflow";
    for(int i = 0; i < s.length(); i++){
        input = shift(input);
        System.out.println(input);
    }
}

public static String shift(String s) {
    return s.charAt(s.length()-1)+s.substring(0, s.length()-1);
}

выход :

wStackoverflo
owStackoverfl
lowStackoverf
flowStackover
rflowStackove
erflowStackov
verflowStacko
overflowStack
koverflowStac
ckoverflowSta
ackoverflowSt
tackoverflowS
Stackoverflow

можно использовать


вы можете использовать StringBuilders.

StringBuilder strb = new StringBuilder();
strb.append(oldChar[oldChar.length-1]).append(oldchar.substring(0, oldChar.length-1));
newStr = strb.toString();

попробуйте это..

        String old = "String";
        char first = old.charAt(old.length()-1);
        String newString = first+old.substring(0,old.length()-1);
        System.out.println(newString);