如何用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 } }
关键细节说明
- 单词边界自定义:代码中用
!Character.isWhitespace(currentChar)判断单词字符,你可以根据实际需求修改(比如仅匹配字母Character.isLetter(currentChar)) - 边界情况处理:包含了输入为
null、字符串以单词结尾、空字符串等场景的兼容 - 效率优势:相比数组实现,
StringBuilder的可变特性避免了频繁的数组扩容与拷贝,操作更高效,代码可读性更强
内容的提问来源于stack exchange,提问作者Alicos
相关产品推荐
相关产品推荐

