交换前两个字符,然后使用Java交换String中的下两个字符

时间:2016-01-03 08:45:09

标签: java string

我一直在尝试这个程序一段时间,但却无法找到合适的解决方案。例如,输入为123456,由用户输入。我想交换前两个字符,然后是接下来的两个字符,依此类推。因此,输出应为214365。我尝试了以下代码但无法获得所需的输出。

public static void main(String[] arg$) {

    Scanner in = new Scanner(System.in);
    System.out.println("enter a word: ");
    String str = in.nextLine();

    char[] arr = str.toLowerCase().toCharArray();
    char temp1, temp2;
    for (int i = 0; i < arr.length; i++) {

        try {
            if ((i % 2) == 0) {
                temp2 = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp2;
            } else {
                System.out.println(Arrays.toString(arr));
                temp1 = arr[i + 1];
                arr[i + 1] = arr[i+2];
                arr[i + 2] = temp1;

            }

        } catch (Exception e) {

        }
    }
    System.out.println("The final String is : =\n\n");
    for (int j = 0; j < arr.length; j++) {
        System.out.println(arr[j]);
    }
}
  

示例输入:

     

123456

     

示例输出:

     

213456

2 个答案:

答案 0 :(得分:5)

你用第二个字符交换第一个字符,然后用第三个字符交换第二个字符,依此类推。这不是你应该做的。

对于n个字符的字符串,最多应该有n / 2个交换(如果n是奇数,则交换的数量将小于n / 2)。

for (int i = 0; i < arr.length; i+=2) {
    if (i + 1 < arr.length) {
        temp2 = arr[i];
        arr[i] = arr[i + 1];
        arr[i + 1] = temp2;
    }
}

答案 1 :(得分:1)

看起来你想交换其他所有角色,我会先用StringBuilder和一个方法在给定位置交换任意两个角色。像,

static void swap(StringBuilder sb, int a, int b) {
    if (a != b && a < sb.length() && b < sb.length()) {
        char ch = sb.charAt(a);
        sb.setCharAt(a, sb.charAt(b));
        sb.setCharAt(b, ch);
    }
}

然后你可以在一个简单的for循环中调用它。像,

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("enter a word: ");
    StringBuilder sb = new StringBuilder(in.nextLine());
    for (int i = 0; i < sb.length(); i += 2) {
        swap(sb, i, i + 1);
    }
    System.out.println(sb.toString());
}

我使用您提供的输入运行了(并获得了预期的输出)。具体地,

enter a word: 
123456
214365