如何替换字符串中相邻重复的第二个字符?Java实现求助
问题分析与解决
你的代码存在几个关键错误,导致无法实现需求:
- 数组越界问题:
- 外层循环
z <= test.length,数组索引从0开始到length-1,test数组长度为1时,z=1会触发test[1]数组越界异常,应改为z < test.length。 - 内层循环
i <= test[z].length(),字符串索引范围是0到length()-1,i+1会超出有效索引范围,应改为i < test[z].length() - 1。
- 外层循环
- String不可变特性误用:
Java的String是不可变对象,replace()方法会返回新字符串,不会修改原字符串,你没有将返回值赋值给test[z],所以原字符串完全没变化。 - replace方法逻辑错误:
replace(char oldChar, char newChar)会替换字符串中所有匹配的oldChar,不是只替换你指定的相邻重复字符,不符合需求。
正确实现代码
要实现「替换相邻重复的第二个字符、避免相邻字符相同」的需求,正确做法是将字符串转为可变的char数组,遍历修改后再转回字符串:
public class Main { public static void main(String[] args) { String[] test = {"aaaabbbb"}; char replaceChar = 'z'; // 遍历字符串数组 for (int z = 0; z < test.length; z++) { char[] charArr = test[z].toCharArray(); // 从第二个字符开始,对比前一个字符是否重复 for (int i = 1; i < charArr.length; i++) { if (charArr[i] == charArr[i-1]) { // 替换当前重复的字符 charArr[i] = replaceChar; } } // 将修改后的char数组转回字符串,存回原数组 test[z] = new String(charArr); System.out.println(test[z]); // 输出:azazazazbzbzbz } } }
代码说明:
- 转char数组:数组是可变结构,直接修改元素比操作不可变的String更高效,也更贴合需求。
- 遍历对比:从索引1开始,检查当前字符与前一个是否相同,相同则替换当前字符为指定的非原字符。
- 转回字符串:修改完成后,将char数组转为新String对象,赋值回原字符串数组。
内容的提问来源于stack exchange,提问作者CodingApperentice
相关产品推荐
相关产品推荐

