You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何实现每隔一个字符交换?新手技术求助

解决Java中每隔一个字符交换的问题

嘿,我来帮你搞定这个问题!你想要实现的是把字符串里每一对相邻字符交换位置(比如baby→abyb),但你的嵌套循环逻辑跑偏了,导致输出完全不符合预期。

先说说你代码里的问题

你的嵌套循环会重复打印偶数索引的字符——每次外层循环执行时,内层都会完整遍历一遍所有偶数位。拿baby举例:

  • 外层第一次循环le=1,先打印str.charAt(1)(也就是a),然后内层循环打印lee=0(b)和lee=2(b),这部分输出abb
  • 外层第二次循环le=3,打印str.charAt(3)(y),接着内层又重复打印b和b,这部分输出ybb
  • 最终整体输出是abbb ybb,完全不是你想要的abyb

正确的实现方式

这里有两种简单易懂的方法可以实现你的需求:

方法1:用StringBuilder构建结果(推荐,更高效)

StringBuilder是处理字符串拼接的好工具,我们可以遍历字符串,每次处理一对字符,先加后一个,再加前一个:

String str = "baby";
StringBuilder result = new StringBuilder();
for (int i = 0; i < str.length(); i += 2) {
    // 如果存在下一个字符,先加入它
    if (i + 1 < str.length()) {
        result.append(str.charAt(i + 1));
    }
    // 再加入当前位置的字符
    result.append(str.charAt(i));
}
System.out.println(result.toString()); // 输出:abyb

如果输入是奇数长度的字符串(比如abcde),这段代码会自动保留最后一个字符,输出badce,完全符合预期。

方法2:用字符数组直接交换

把字符串转成字符数组,直接交换每一对相邻字符的位置,再转回字符串:

String str = "baby";
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length - 1; i += 2) {
    // 交换i和i+1位置的字符
    char temp = chars[i];
    chars[i] = chars[i + 1];
    chars[i + 1] = temp;
}
System.out.println(new String(chars)); // 输出:abyb

这种方法更直观,直接操作字符的位置,很适合理解交换逻辑。

内容的提问来源于stack exchange,提问作者Blue Holliday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:57:50