在字符串中移动字符

时间:2013-11-27 20:11:48

标签: java arrays string char

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数组(称为oldChar),将oldChar的最后一个索引指定为newChar的第一个索引,并创建一个for循环将oldChar的第一个索引作为我的新Char数组的第二个索引,依此类推。最后,我将char数组转换回字符串。

我觉得我做了太多的事情来做非常简单的事情。有没有更有效的方法来做这样的事情?

编辑感谢您的回答!

7 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分: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

答案 2 :(得分:0)

您可以使用System.arrayCopy

char[] oldChar = newStr.toCharArray();
char[] newChar = new char[oldChar.length];
newChar[0] = oldChar[oldChar.length - 1];
System.arrayCopy(oldChar, 0, newChar, 1, oldChar.length - 1);

答案 3 :(得分:0)

您可以使用StringBuilders。

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

答案 4 :(得分:0)

试试这个..

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

答案 5 :(得分:0)

另一种解决方案,但不使用循环,可以左右移动:

public static String cyclicLeftShift(String s, int n){ //'n' is the number of characters to shift left
        n = n%s.length();
        return s.substring(n) + s.substring(0, n);
    }
      
public static String cyclicRightShift(String s, int n){ //'n' is the number of characters to shift right
        n = n%s.length();
        return  s.substring(s.length() - n , s.length()) + s.substring(0, s.length() - n);
    }

答案 6 :(得分:-1)

通过Java,您可以将其向前移动O(n),其中n是根据字符在空间o(1)前进的次数

public static String shiftChars(String s , int times) {
    String temp = s;
    for (int i = 0; i < times ; i++) {
        temp =  temp.charAt(temp.length()-1)+temp.substring(0, temp.length()-1);
    }
    return temp;
}