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
相关产品推荐
相关产品推荐

