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

Java实现字符串每行60字符换行且不拆分单词的问题排查

问题原因

现有代码的逻辑是直接从i + 60位置向后查找第一个空格替换为换行,当第60位落在某个单词内部时,就会出现单词被拆分的问题。

修复后的完整代码

public String formatText(String text) {
    // 预处理:去除首尾空格,将连续多个空格替换为单个空格
    StringBuilder sb = new StringBuilder(text.replaceAll("(^ )|( $)", "").replaceAll("\\s{2,}", " "));
    int lineMaxLength = 60;
    int offset = 0;
    int contentLength = sb.length();
    // 剩余文本长度超过最大行宽时循环处理
    while (offset + lineMaxLength < contentLength) {
        // 从最大允许行尾位置向前找最近的空格作为换行点
        int breakPosition = sb.lastIndexOf(" ", offset + lineMaxLength);
        // 兼容超长单词场景:60字符内无空格时强制在第60位换行
        if (breakPosition == -1 || breakPosition <= offset) {
            breakPosition = offset + lineMaxLength;
        }
        // 将换行点的空格替换为换行符
        sb.replace(breakPosition, breakPosition + 1, "\n");
        // 更新下一行的起始偏移量
        offset = breakPosition + 1;
        contentLength = sb.length();
    }
    return sb.toString();
}

实现逻辑说明

  • 预处理逻辑保持和原有需求一致,先完成多倍空格的清理
  • 每次从当前行起始位置计算最大允许结束位置(偏移量+60),向前查找最近的空格作为换行位置,保证当前行不会拆分完整单词
  • 增加超长单词兼容逻辑,避免出现整行无空格导致的死循环问题
  • 换行后更新下一行的起始偏移量,循环处理直到剩余文本长度不足60

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:15:04