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

Java实现字符串单词重复功能输出格式异常求排查修复

问题根因

  • 原代码仅将空格作为单词拆分边界,没有处理标点和单词的绑定关系,导致标点位置错位
  • 空格处理逻辑重复叠加:遇到空格时既追加了带空格的临时缓存内容,又额外追加了当前空格字符,最终产生多余连续空格

修复方案

修复逻辑核心:将连续英文字母识别为单词,非英文字符中,标点跟随对应单词的最后一次重复项之后,空格仅作为单词分隔符使用,不会重复添加。
修复后代码如下:

public static String repeatWords(String s, int num) {
    // 重复次数小于等于1时直接返回原字符串,无需处理
    if (num <= 1) {
        return s;
    }
    StringBuilder result = new StringBuilder();
    StringBuilder currentWord = new StringBuilder();
    int length = s.length();
    for (int i = 0; i < length; i++) {
        char c = s.charAt(i);
        // 英文字符归入当前单词
        if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
            currentWord.append(c);
        } else {
            // 遇到非英文字符,先完成当前单词的重复输出
            if (currentWord.length() > 0) {
                result.append(currentWord);
                for (int j = 1; j < num; j++) {
                    result.append(" ").append(currentWord);
                }
                currentWord.setLength(0);
            }
            // 追加非英文字符(标点、空格等)
            result.append(c);
        }
    }
    // 处理末尾无标点/空格结尾的单词,若不需要末尾单词重复可删除此段逻辑
    if (currentWord.length() > 0) {
        result.append(currentWord);
        for (int j = 1; j < num; j++) {
            result.append(" ").append(currentWord);
        }
    }
    return result.toString();
}

效果验证

输入参数 s = "How are you? I am fine.", num = 2 时,输出结果为 How How are are you you? I I am am fine fine.,符合单词重复、标点跟随在最后一次重复单词后的规则,无多余空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:45:03