Перемещение символов внутри строки
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 ответов
Вы можете сделать вашу жизнь проще :
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);