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
相关产品推荐
相关产品推荐

