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

循环遍历StringBuilder时如何在内容中间新增换行符?

问题原因

  • 数组越界:循环条件是i < sbText.length(),当i走到最后一个索引(sbText.length() - 1)时,调用charAt(i+1)会访问超出范围的索引,直接抛出StringIndexOutOfBoundException。
  • 字符比较错误:charAt()返回的是char基础类型,你用双引号包裹的"\n"是String类型,两者用==比较逻辑完全错误,应该用单引号的'\n'字符常量比较。
  • 插入方法用错:append()是把内容追加到字符串末尾,你需要的是在当前换行符后面插入新的换行,应该用insert()方法。
  • 插入后未跳过索引:插入换行后字符串长度会+1,如果你不手动让i往后跳一位,下一轮循环会检测到你刚插入的换行,导致重复插入多个换行。

修复后的遍历实现代码

String ns = "\n";
// 循环只到倒数第二个字符,避免i+1越界
for(int i = 0; i < sbText.length() - 1 ; i++)
{
      if(sbText.charAt(i) == '\n' && sbText.charAt(i+1) != '\n')
        {
             // 在当前位置的下一位插入换行
             sbText.insert(i+1, ns);
             // 插入后跳过多出来的这个换行,避免重复判断
             i++;
        }
}

更简洁的实现方案

你完全不用自己遍历处理,直接用正则替换就能实现需求,匹配所有前后都没有换行的单个换行符,替换成两个换行即可:

String result = sbText.toString().replaceAll("(?<!\\n)\\n(?!\\n)", "\n\n");
// 如果要保留StringBuilder对象可以这么写:
sbText = new StringBuilder(result);

内容的提问来源于stack exchange,提问作者Akhilesh Raturi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:15:03