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

如何用StringBuilder/StringBuffer实现指定长度单词替换(禁用正则等方法)

用StringBuilder实现指定长度单词替换(禁用正则及String相关方法)

核心思路

通过遍历原字符串的每个字符,用两个StringBuilder分别维护最终结果和当前正在收集的单词:

  • 遇到单词字符时,追加到当前单词的StringBuilder
  • 遇到非单词字符时,先检查当前单词的长度:符合目标长度则追加替换字符串到结果,否则追加原单词;再将非单词字符追加到结果,最后重置当前单词容器
  • 遍历结束后,别忘了处理字符串末尾可能残留的单词

实现代码

public class WordReplacer {
    public static String replaceWordsOfLength(String input, int targetLength, String replacement) {
        if (input == null || replacement == null) {
            return input;
        }
        // 存储最终结果
        StringBuilder resultBuilder = new StringBuilder();
        // 临时存储当前正在收集的单词
        StringBuilder currentWordBuilder = new StringBuilder();
        
        for (int i = 0; i < input.length(); i++) {
            char currentChar = input.charAt(i);
            // 定义单词字符:此处以非空白字符为例,可根据需求调整(如仅字母/数字)
            boolean isWordCharacter = !Character.isWhitespace(currentChar);
            
            if (isWordCharacter) {
                currentWordBuilder.append(currentChar);
            } else {
                // 处理当前积累的单词
                handleCurrentWord(resultBuilder, currentWordBuilder, targetLength, replacement);
                // 追加非单词字符到结果
                resultBuilder.append(currentChar);
                // 重置临时单词容器
                currentWordBuilder.setLength(0);
            }
        }
        // 处理字符串末尾的最后一个单词
        handleCurrentWord(resultBuilder, currentWordBuilder, targetLength, replacement);
        
        return resultBuilder.toString();
    }
    
    private static void handleCurrentWord(StringBuilder result, StringBuilder currentWord, int targetLen, String replacement) {
        int wordLength = currentWord.length();
        if (wordLength == targetLen) {
            result.append(replacement);
        } else if (wordLength > 0) {
            result.append(currentWord);
        }
    }
    
    // 测试示例
    public static void main(String[] args) {
        String testText = "The quick brown fox jumps over the lazy dog";
        // 替换长度为3的单词为"***"
        String output = replaceWordsOfLength(testText, 3, "***");
        System.out.println(output);
        // 输出:*** quick brown fox jumps over *** lazy dog
    }
}

关键细节说明

  1. 单词边界自定义:代码中用!Character.isWhitespace(currentChar)判断单词字符,你可以根据实际需求修改(比如仅匹配字母Character.isLetter(currentChar))
  2. 边界情况处理:包含了输入为null、字符串以单词结尾、空字符串等场景的兼容
  3. 效率优势:相比数组实现,StringBuilder的可变特性避免了频繁的数组扩容与拷贝,操作更高效,代码可读性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:01:05