我正在尝试重新排列字符串的字符,以便第一个字符位于紧随其后的后两个字符之后,即,如果字符串为“ abc”,则重新排列为“ bca”。然后,对于每个三个字符的分组,此过程将在较大的字符串上重复进行,即,如果字符串是“ tcagdo”,则重排将是“ catdog”,依此类推。
这是我到目前为止的代码:
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;
}
它要进行一系列测试,并且对某些测试有效,但对所有测试无效。我只需要帮助您指出正确的方向即可。
答案 0 :(得分:6)
不要破坏您的任务,但是正则表达式替换提供了一种非常简洁的方法:
String input = "tcagdo";
String output = input.replaceAll("(.)(..)", "$2$1");
System.out.println(output);
正则表达式模式(.)(..)
一次匹配三个字符,并在单独的捕获组中捕获前两个字符。然后,替换人员将根据需要的顺序将这些组拼接在一起。
答案 1 :(得分:0)
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);
}
使用temp
变量进行简单的三向交换,并额外检查length
是否可被3整除。
char[]
数组更适合交换元素,因为Strings
在Java
中是不变的。