如何在Java中交换所有其他字母/字符?

时间:2018-04-19 07:01:00

标签: java string

我是java的初学者,现在我一直试图交换其他所有的信件。例如,如果输入是: 宝宝 我希望输出为: abyb

但我似乎无法做到这一点。这是我的代码,

String str = "baby";

    int lee =0;
    int le = 0;
    for ( le = 1; le <= str.length(); le +=2) {
        System.out.print(str.charAt(le));
        for ( lee = 0; lee < str.length(); lee +=2) {
        System.out.print(str.charAt(lee));

        }}

提前完成

2 个答案:

答案 0 :(得分:4)

使用正则表达式替换非常容易:

String input = "baby";
input = input.replaceAll("(.)(.)", "$2$1");
System.out.println(input);

abyb

Demo

如果您真的想通过循环执行此操作,请使用StringBuilder,并在向下走输入时只需两步:

String input = "baby";
StringBuilder sb = new StringBuilder("");
for (int i=0; i < input.length()-1; i=i+2) {
    sb.append(input.charAt(i+1));
    sb.append(input.charAt(i));
}
// edge case: for odd-length inputs, we don't swap the final letter
// but we still add it to the end of the string
if (input.length() % 2 != 0) sb.append(input.charAt(input.length()-1));
System.out.println(sb);

答案 1 :(得分:3)

如果你想学习循环,你只需要一个:

 public static void main(String[] args)
      {
          String str = "baby";
            for (int i = 1; i <= str.length(); i +=2) {
                if(i<str.length())
                   System.out.print(str.charAt(i));
                System.out.print(str.charAt(i-1));
              }
      }

你在每次迭代时提前2个索引,得到两个字母并交换它们。检查长度不是超出范围,因为如果你有一个奇怪的字符串长度,你会连续2个索引。

对于超酷的递归解决方案:

  public static void main(String[] args)
  {         
      printSwapped("baby");
  }

 static void printSwapped(String str) {
     if(str.length()<=1) {
         System.out.print(str);
     }else {
         System.out.print(str.charAt(1));
         System.out.print(str.charAt(0));
         printSwapped(str.substring(2));
     }       
 }