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

如何使用StringBuilder改写添加@前缀的用户名高亮代码?

用StringBuilder实现用户名高亮功能

先搞懂StringBuilder的核心逻辑

String是不可变的,每次调用replace、+这类操作都会生成新的String对象,频繁操作时会浪费内存、拖慢效率。而StringBuilder是可变字符序列,它内部用字符数组存储内容,修改时直接在数组里操作,不会频繁创建新对象,性能更优。

用StringBuilder实现的代码

public String highlightUsernames(String tweetText, String[] usernames) {
    // 将原始字符串转为StringBuilder,方便后续修改操作
    StringBuilder sb = new StringBuilder(tweetText);
    
    // 遍历所有待处理的用户名
    for (String username : usernames) {
        int index = sb.indexOf(username);
        // 循环查找所有匹配的用户名,避免仅替换第一个匹配项
        while (index != -1) {
            // 在匹配到的用户名前插入@前缀
            sb.insert(index, "@");
            // 移动索引位置,跳过已处理的内容,避免重复替换
            index = sb.indexOf(username, index + username.length() + 1);
        }
    }
    
    return sb.toString();
}

和原String版本的差异

原代码使用String.replace()时,每次循环都会生成新的String对象,产生大量中间垃圾。而StringBuilder版本全程仅在一个对象内操作,无多余对象创建,处理长文本或大量用户名时,性能优势会非常明显。

额外提示:如果用户名存在包含关系(比如"Trump"和"DonaldTrump"),建议先对usernames数组按字符串长度倒序排序再遍历,避免短用户名先被替换导致长用户名无法匹配。

内容的提问来源于stack exchange,提问作者Jorge D. García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:53:15