Java 重新排列字符串的字符
我试图重新排列字符串的字符,使第一个字符位于其后的两个字符之后,即,如果字符串是“abc”,则重新排列将是“bca”。然后,对于每个三个字符的分组,该过程将在较大的字符串上重复,即,如果字符串是“tcagdo”,则重新排列将是“catdog”,依此类推 这是我目前掌握的代码:Java 重新排列字符串的字符,java,string,Java,String,我试图重新排列字符串的字符,使第一个字符位于其后的两个字符之后,即,如果字符串是“abc”,则重新排列将是“bca”。然后,对于每个三个字符的分组,该过程将在较大的字符串上重复,即,如果字符串是“tcagdo”,则重新排列将是“catdog”,依此类推 这是我目前掌握的代码: public String oneTwo(String str) { String rep = str; if(str.length() < 3){ return ""; } for(int j = 0
public String oneTwo(String str) {
String rep = str;
if(str.length() < 3){
return "";
}
for(int j = 0;j < str.length();j = j+3){
for(int i = 0;i < str.length();i = i + 3){
rep =str.substring(i+1,i+3) + str.substring(i,i+1);
}
return rep;
}
return rep;
}
公共字符串oneTwo(字符串str){
字符串rep=str;
如果(str.length()<3){
返回“”;
}
对于(int j=0;j
它运行了一系列测试,对其中一些测试有效,但不是对所有测试都有效。我只需要帮助我指出正确的方向。不要破坏你的作业,但regex替换提供了一种非常简洁的方法:
String input = "tcagdo";
String output = input.replaceAll("(.)(..)", "$2$1");
System.out.println(output);
正则表达式模式一次匹配三个字符,在单独的捕获组中捕获前两个和后两个字符。然后,替换将使用所需的顺序将组拼接在一起。publicstaticvoidmain(String[]args){
public static void main(String[] args) {
System.out.println(oneTwo("tcagdo"));
}
private static String oneTwo(String str) {
if (str.length() < 3) return "";
char[] res = str.toCharArray();
for (int j = 0; j < res.length; j += 3){
if (j + 3 > res.length) {
break;
} else {
char temp = res[j];
res[j] = res[j + 1];
res[j + 1] = res[j + 2];
res[j + 2] = temp;
}
}
return String.valueOf(res);
}
System.out.println(oneTwo(“tcagdo”);
}
私有静态字符串oneTwo(字符串str){
if(str.length()<3)返回“”;
char[]res=str.toCharArray();
对于(int j=0;j分辨率长度){
打破
}否则{
字符温度=res[j];
res[j]=res[j+1];
res[j+1]=res[j+2];
res[j+2]=温度;
}
}
返回字符串.valueOf(res);
}
只需使用temp
变量进行简单的三路交换,并附加检查长度是否不能被3整除
char[]
array更适合交换元素,因为Strings
在Java
中是不可变的,请尝试附加一个调试器并遍历代码。或者,拿支笔和纸,逐行写下整个状态