Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重新排列字符串的字符_Java_String - Fatal编程技术网

Java 重新排列字符串的字符

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

我试图重新排列字符串的字符,使第一个字符位于其后的两个字符之后,即,如果字符串是“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;
}
公共字符串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

中是不可变的,请尝试附加一个调试器并遍历代码。或者,拿支笔和纸,逐行写下整个状态