如何在字符串中每两个字母交换一次?-java

a1o7rhls  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(353)

所以我现在正在做一个个人项目,我做了一个程序,尝试交换给定字符串中的每两个字母。
所以我想要这样的输出:
(注意输入字符串是“abllte”)

ballet

所以我写了这个方法

public static String codeString(String input) {
      String firstLetter = "";
      String secoundLetter = "";
      String result = "";
      for(int i = 0; i < input.length()-1; i++){
         for(int c = 0; c < i; c = c +2)
         {  
            firstLetter = input.substring(c,c + 1);
            secoundLetter = input.substring(c + 1, c + 2); 

         }
         result = result + secoundLetter + firstLetter;
      }
      return result;
   }

但我得到的结果是:

ababllll

你知道怎么解决这个问题吗?
提前谢谢!

4jb9z9bj

4jb9z9bj1#

我不确定嵌套for循环的意义是什么。你只需要一个循环就可以做到。

public static String codeString(String input) {
   String firstLetter = "";
   String secoundLetter = "";
   String result = "";
   for(int i = 0; i < input.length()-1; i+=2){

      firstLetter = input.substring(i,i+1);
      secoundLetter = input.substring(i+1,i+2);
      result = result + secoundLetter + firstLetter;

   }

   return result;
}

如果输入字符串的字符数为奇数,则必须附加额外的最后一个字符。

public static String codeString(String input) {
   String firstLetter = "";
   String secoundLetter = "";
   String result = "";
   for(int i = 0; i < input.length()-1; i+=2){

      firstLetter = input.substring(i, i+1);
      secoundLetter = input.substring(i+1, i+2);
      result = result + secoundLetter + firstLetter;

   }

   if(input.length() % 2 == 1)
      result += input.substring(input.length()-1, input.length());

   return result;
}
6uxekuva

6uxekuva2#

你只需要一个循环。这适用于偶数和奇数长度的字符串。
首先,使用的方法返回 StringBuilder 处于当前修改状态。
所以呢 sb.insert(i, sb.charAt(i+1)) 在处插入字符 i+1i 所以如果 sb 包含 ab , StringBuilder 现在将包含 bab insert返回修改的 StringBuilder 那么现在呢 sb.deleteCharAt(i+2) 删除第二个 a (刚刚复制的那个)。
然后重复此操作,直到交换所有字符。
由于不断插入和删除字符,这不是很有效。

for (String s : new String[] { "abcdefg", "abcdefgh" }) {
    StringBuilder sb = new StringBuilder(s);
    for (int i = 0; i < sb.length() - 1; i += 2) {
        sb.insert(i, sb.charAt(i + 1)).deleteCharAt(i + 2);
    }
    System.out.println(s + " -> " + sb);
}

印刷品

abcdefg -> badcfeg
abcdefgh -> badcfehg

对于一个更有效的算法,这将是一个方向。它也更直观。

for (String s : new String[] { "abcdefg", "abcdefgh" }) {
    char ch[] = s.toCharArray();
    for (int i = 0; i < ch.length - 1; i+=2) {
        char c = ch[i];
        ch[i] = ch[i + 1];
        ch[i + 1] = c;
    }
    String d = String.valueOf(ch);

    System.out.println(s + " -> " + d);
}

这张照片和上面一样。

x7yiwoj4

x7yiwoj43#

您不需要嵌套循环。将外循环更改为“逐步” 2i = i + 2 拆下内环。

public class Main {
    public static void main(String[] args) {
        System.out.println(codeString("abllte"));
    }

    public static String codeString(String input) {
        String firstLetter = "";
        String secondLetter = "";
        String result = "";
        for (int i = 0; i < input.length() - 1; i = i + 2) {
            firstLetter = input.substring(i, i + 1);
            secondLetter = input.substring(i + 1, i + 2);
            result = result + secondLetter + firstLetter;
        }
        return result;
    }
}

输出:

ballet

另一种方法:
可以使用两个参数创建函数: input 字符串作为第一个参数 n 作为第二个参数 n 中的字符 input 字符串需要反转。

public class Main {
    public static void main(String[] args) {
        System.out.println(codeString("abllte", 1));
        System.out.println(codeString("abllte", 2));
        System.out.println(codeString("abllte", 3));
        System.out.println(codeString("abllte", 4));
    }

    public static String codeString(String input, int n) {
        if (n <= input.length() / 2) {
            StringBuilder result = new StringBuilder();
            for (int i = 0; i < input.length() - n + 1; i = i + n) {
                result.append(new StringBuilder(input.substring(i, i + n)).reverse());
            }
            return result.toString();
        } else {
            return input;
        }
    }
}

输出:

abllte
ballet
lbaetl
abllte

相关问题