处理字符串重复字符添加分隔符时出现索引越界异常,求问题原因
问题分析与修复方案
嘿,这个索引越界的问题我帮你捋得明明白白!你遇到的Index out of range exception根源完全在循环的边界处理上:
当你的for循环条件写的是i < res.Length时,i会从0一直跑到res.Length - 1(也就是最后一个字符的索引)。这时候你去访问res[i + 1],就相当于碰了res[res.Length]这个位置——而字符串/数组的合法索引范围是从0到Length-1,这个位置根本不存在,自然就抛出异常了。
修复后的代码
我们只需要把循环的终止条件改成i < res.Length - 1,让i只遍历到倒数第二个字符,这样i+1就始终是有效的索引。另外,最后别忘了把最后一个字符补到结果里,不然会漏掉:
string t = ""; for (int i = 0; i < res.Length - 1; i++) { t += res[i]; if (res[i] == res[i + 1]) { t += 'x'; } } // 处理空字符串的情况,避免再次触发索引越界 if (res.Length > 0) { t += res[res.Length - 1]; }
额外优化建议(可选)
如果你的目标字符串很长,频繁用+=拼接会创建大量临时字符串对象,效率很低。可以改用StringBuilder来提升性能:
StringBuilder t = new StringBuilder(); for (int i = 0; i < res.Length - 1; i++) { t.Append(res[i]); if (res[i] == res[i + 1]) { t.Append('x'); } } if (res.Length > 0) { t.Append(res[res.Length - 1]); } string result = t.ToString();
内容的提问来源于stack exchange,提问作者AspiringLilly
相关产品推荐
相关产品推荐

