字符串按指定长度分段反转:剩余字符未正确反转的技术求助
解决字符串分段反转时剩余字符未处理的问题
我一眼就看出问题所在啦——你的代码在处理到最后一段字符时,如果剩余长度不足指定的x,就直接跳出循环了,根本没对这段字符执行反转操作!咱们来把这个问题搞定。
问题分析
你看,当输入HELLO和数字3时:
- 第一次循环
i=0,处理前3个字符HEL,反转成LEH,字符串变成LEHLO; - 接着
i +=3变成3,这时候i+x=6,而字符串长度是5(索引最大到4),你的判断if (i + x > st.length()-1){ break; }就触发了,直接跳出循环,剩下的LO根本没被反转,所以结果才是LEHLO而非预期的LEHOL。
修复方案
核心思路就是:不管最后一段剩余字符有多少,都要执行反转。我们只需要把分段的结束索引改成Math.min(i+x, st.length()),确保不会超出字符串长度,同时去掉多余的break判断就行。
修改后的代码如下:
// 示例输入 String st = "HELLO"; int x = 3; for (int i = 0; i < st.length();) { // 计算当前分段的结束位置,避免越界 int endIndex = Math.min(i + x, st.length()); // 反转当前分段并重新拼接字符串 st = st.substring(0, i) + new String(new StringBuilder(st.substring(i, endIndex)).reverse()) + st.substring(endIndex); // 跳到下一个分段的起始位置 i += x; } System.out.println(st); // 输出:LEHOL
验证效果
- 测试
TELLER和3:第一次反转前3个字符TEL→LET,字符串变成LETTER;接着i=3,反转后3个字符LER→REL,最终得到LETREL,符合预期。 - 测试
HELLO和3:第二次循环处理索引3到5的LO,反转成OL,拼接后得到LEHOL,完美解决你的问题!
内容的提问来源于stack exchange,提问作者user10345764
相关产品推荐
相关产品推荐

