重新排列字符串的字符

时间:2020-06-13 05:30:23

标签: java string

我正在尝试重新排列字符串的字符,以便第一个字符位于紧随其后的后两个字符之后,即,如果字符串为“ 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;
}

它要进行一系列测试,并且对某些测试有效,但对所有测试无效。我只需要帮助您指出正确的方向即可。

2 个答案:

答案 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[]数组更适合交换元素,因为StringsJava中是不变的。