Java 在字符串中移动字符 stringnewstr; 公共随机变量(字符串输入){ newStr=输入; } 公共无效移位chars(){ char[]oldChar=newStr.toCharArray(); char[]newChar=newChar[oldChar.length]; newChar[0]=oldChar[oldChar.length-1]; for(int i=1;i
我创建了一个将字符向前移动1的方法。例如,输入可以是: 输入:Java 在字符串中移动字符 stringnewstr; 公共随机变量(字符串输入){ newStr=输入; } 公共无效移位chars(){ char[]oldChar=newStr.toCharArray(); char[]newChar=newChar[oldChar.length]; newChar[0]=oldChar[oldChar.length-1]; for(int i=1;i,java,arrays,string,char,Java,Arrays,String,Char,我创建了一个将字符向前移动1的方法。例如,输入可以是: 输入:Stackoverflow 输出:wStackoverflo 我是如何变异字符串的一个实例的。将该字符串转换为char数组(称之为oldChar),将oldChar的最后一个索引指定为newChar的第一个索引,并创建一个for循环,将oldChar的第一个索引指定为我的新char数组的第二个索引,依此类推。最后,我将char数组转换回字符串 我觉得我做了太多太简单的事情。有没有更有效的方法来做这样的事情 编辑感谢您的伟大的答案 你可
Stackoverflow
输出:wStackoverflo
我是如何变异字符串的一个实例的。将该字符串转换为char
数组(称之为oldChar
),将oldChar
的最后一个索引指定为newChar
的第一个索引,并创建一个for循环,将oldChar
的第一个索引指定为我的新char
数组的第二个索引,依此类推。最后,我将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);
}
您可以使用:
您可以使用StringBuilder
newStr = newStr.charAt(newStr.length() - 1) + newStr.substring(0, newStr.length() - 1);
试试这个
StringBuilder strb = new StringBuilder();
strb.append(oldChar[oldChar.length-1]).append(oldchar.substring(0, oldChar.length-1));
newStr = strb.toString();
通过Java,u可以按O(n)将其向前移动,其中n是按字符向前移动的次数,该字符是哪个空间O(1)
公共静态字符串移位chars(字符串s,整数倍){
字符串温度=s;
for(int i=0;i
另一种解决方案,但不使用循环,用于左右换档:
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;
}
你的程序的时间和空间复杂度是多少?我不知道,尽管我认为它相当高。这似乎是离题的,因为它应该打开:@SotiriosDelimanolis子字符串解决方案实际上更快吗?我不知道子串是否产生O(1)?如果我没记错的话,java的新版本不再有偏移量了。您创建了一个具有类似但已更改的值的新字符串。字符串是不可变的。哇。这是一个激烈的一行。所以让我直说吧。您将最后一个索引视为字符,将最后一个索引之前的字符视为完整字符串?是的。但是,如果您觉得第一个操作数更清楚,您也可以使用
newStr.substring(newStr.length()-1)
作为第一个操作数。这是一个非常漂亮的解决方案,并且非常好地使用了内置Java方法。谢谢JB。@JB你能检查一下我对这个问题的最后一点评论吗?你能评论一下我对复杂性的看法是否正确吗?只是更正代码行。第二个newStr.length中缺少()
。将是:newStr=newStr.charAt(newStr.length()-1)+newStr.substring(0,newStr.length()-1)代码>您的解决方案与JB Nizet接受的答案相同。这无关紧要。事实上,我只是想和大家分享一下我是如何使用这段代码来解决我的问题的,谢谢你关注这段代码^ ^不过你的答案可能会被删除。我们的想法是发布不同的答案。
newStr = newStr.charAt(newStr.length() - 1) + newStr.substring(0, newStr.length() - 1);
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);
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;
}
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);
}