当前位置: 首页 > news >正文

StringBuilder

文章目录

  • 介绍
    • 一、核心定义
    • 二、为什么需要 StringBuilder?
    • 三、底层原理(关键)
    • 四、常用方法
      • 1️⃣ append(最重要)
      • 2️⃣ toString
      • 3️⃣ insert
      • 4️⃣ delete
      • 5️⃣ replace
      • 6️⃣ reverse
    • 五、性能对比(面试重点)
    • 六、StringBuilder vs StringBuffer
    • 七、典型使用场景
      • ✅ 1. 循环拼接字符串
      • ✅ 2. SSE / 流式拼接(你刚刚的场景)
      • ✅ 3. 构建复杂字符串(SQL / JSON)
    • 八、容量优化(进阶)
  • 例子
    • 一、最基础:字符串拼接
    • 二、循环拼接(最常见场景)
    • 三、拼接数组(很实用)
    • 四、构建 JSON 字符串
    • 五、SQL 拼接(后端常见)
    • 六、字符串反转
    • 七、插入 & 删除
    • 八、你当前场景(SSE 流式拼接)
    • 九、链式写法(推荐)
    • 总结(快速记忆)

StringBuilder是 Java 中用于高效构建和拼接字符串的核心类,属于java.lang包。

介绍

一、核心定义

StringBuilder是一个可变字符串容器(mutable sequence of characters)

对比:

  • String👉 不可变(immutable)
  • StringBuilder👉 可变(mutable)

二、为什么需要 StringBuilder?

看这个例子:

Strings="";s+="a";s+="b";s+="c";

⚠️ 实际发生的是:

"" → "a" → "ab" → "abc"

👉 每一步都会创建新对象(性能差)


StringBuilder

StringBuildersb=newStringBuilder();sb.append("a");sb.append("b");sb.append("c");

👉 只是在同一个对象上追加(性能高)


三、底层原理(关键)

StringBuilder内部其实是:

char[]value;
  • 一个可扩容数组

特点:

  • 默认容量:16
  • 不够时自动扩容(通常 *2 + 2)

四、常用方法

1️⃣ append(最重要)

sb.append("hello");sb.append(123);sb.append(true);

👉 支持各种类型(会自动转字符串)


2️⃣ toString

Stringresult=sb.toString();

👉 转成普通字符串(最终输出)


3️⃣ insert

sb.insert(0,"Hi ");

👉 插入内容


4️⃣ delete

sb.delete(0,2);

👉 删除指定范围


5️⃣ replace

sb.replace(0,2,"Hello");

6️⃣ reverse

sb.reverse();

五、性能对比(面试重点)

操作StringStringBuilder
拼接❌ 慢(频繁创建对象)✅ 快
修改❌ 不支持✅ 支持
内存❌ 浪费✅ 高效

六、StringBuilder vs StringBuffer

线程安全性能
StringBuilder❌ 非线程安全✅ 更快
StringBuffer✅ 线程安全(synchronized)❌ 较慢

👉 结论:

  • 单线程 👉 用StringBuilder
  • 多线程 👉 用StringBuffer(或自己加锁)

七、典型使用场景

✅ 1. 循环拼接字符串

StringBuildersb=newStringBuilder();for(inti=0;i<1000;i++){sb.append(i);}

✅ 2. SSE / 流式拼接(你刚刚的场景)

fullResponse.append(chunk);

👉 一边接收,一边拼完整结果


✅ 3. 构建复杂字符串(SQL / JSON)


八、容量优化(进阶)

可以预设容量避免扩容:

StringBuildersb=newStringBuilder(1024);

👉 高性能场景建议这样做


例子

下面给你几个从简单到实用StringBuilder示例,直接贴代码 + 说明,方便你快速上手。


一、最基础:字符串拼接

StringBuildersb=newStringBuilder();sb.append("Hello");sb.append(" ");sb.append("World");System.out.println(sb.toString());

👉 输出:

Hello World

✔️ 用于替代"Hello" + " " + "World"


二、循环拼接(最常见场景)

StringBuildersb=newStringBuilder();for(inti=1;i<=5;i++){sb.append(i).append(",");}System.out.println(sb.toString());

👉 输出:

1,2,3,4,5,

👉 优化去掉最后一个逗号:

sb.deleteCharAt(sb.length()-1);

三、拼接数组(很实用)

String[]arr={"苹果","香蕉","橙子"};StringBuildersb=newStringBuilder();for(Strings:arr){sb.append(s).append(" | ");}sb.delete(sb.length()-3,sb.length());System.out.println(sb);

👉 输出:

苹果 | 香蕉 | 橙子

四、构建 JSON 字符串

StringBuildersb=newStringBuilder();sb.append("{");sb.append("\"name\":\"张三\",");sb.append("\"age\":18");sb.append("}");System.out.println(sb.toString());

👉 输出:

{"name":"张三","age":18}

五、SQL 拼接(后端常见)

StringBuildersql=newStringBuilder();sql.append("SELECT * FROM user WHERE 1=1 ");if(true){sql.append("AND name = '张三' ");}if(true){sql.append("AND age > 18 ");}System.out.println(sql);

👉 输出:

SELECT * FROM user WHERE 1=1 AND name = '张三' AND age > 18

六、字符串反转

StringBuildersb=newStringBuilder("hello");sb.reverse();System.out.println(sb);

👉 输出:

olleh

七、插入 & 删除

StringBuildersb=newStringBuilder("HelloWorld");sb.insert(5," ");sb.delete(0,1);System.out.println(sb);

👉 输出:

ello World

八、你当前场景(SSE 流式拼接)

StringBuilderfullResponse=newStringBuilder();String[]chunks={"你","好",",","世","界"};for(Stringchunk:chunks){// 模拟流式返回System.out.println("发送:"+chunk);// 拼完整结果fullResponse.append(chunk);}System.out.println("完整结果:"+fullResponse);

👉 输出:

完整结果:你好,世界

九、链式写法(推荐)

Stringresult=newStringBuilder().append("Java ").append("很 ").append("好用").toString();System.out.println(result);

总结(快速记忆)

你可以把StringBuilder理解为:

👉 一个“字符串拼接工具箱”,专门用来高效处理字符串

最常用的就 3 个:

append()// 拼接toString()// 转字符串delete()// 删除
http://www.cnnetsun.cn/news/1669743.html

相关文章:

  • 7大维度提升抖音资源获取效率:从单线程到企业级解决方案
  • PPTist免费开源在线PPT制作工具:三大核心功能与五分钟上手终极指南
  • Bidili Generator开源镜像:支持BF16/LoRA热插拔/显存治理的全栈开源项目
  • 9大优势打造专业排版:Outfit开源无衬线字体全解析
  • 5步打造无缝手写工作流:Xournal++高效数字笔记解决方案
  • AudioLDM-S音效质量调优:Duration/Steps/Batch Size三参数协同优化指南
  • 5分钟上手WebPlotDigitizer:从图表图像中提取数据的智能助手
  • 同一篇论文知网检测AI率每次不同?不是玄学是这个
  • SEO_新手必学的SEO优化基础教程与步骤详解(351 )
  • Graphormer效果展示:OGB基准SOTA分子属性预测结果实测分享
  • 基础架构架构师岗位技术手册
  • Spring IOC/DI 管理第三方Bean + 加载properties配置文件详解(Spring系列2)
  • 终极文件伪装指南:apate如何3秒内让你的文件“改头换面“
  • Full Page Screen Capture:智能滚动截图的完整网页保存方案 | 开发者与内容创作者必备
  • 为Windows 11 LTSC添加应用商店:3步实现系统功能完整化的创新解决方案
  • 【参数拟合】基于CMA-ES优化算法的OER模型全自动参数拟合系统附Matlab代码
  • 4大突破重构Web演示文稿创作体验:PPTist技术解析与实践指南
  • SRWE:突破Windows窗口限制的全能尺寸编辑工具
  • YahooFinanceApi:构建金融数据系统的三个核心挑战与解决方案
  • Qwen3-ForcedAligner应用案例:如何为口播视频快速添加精准字幕
  • 代码随想录一刷记录Day15——leetcode110.平衡二叉树 257. 二叉树的所有路径
  • GHelper终极指南:轻量级华硕笔记本性能控制工具完全解析
  • 如何在10分钟内掌握Stanford CoreNLP:自然语言处理工具包的终极实战指南
  • 如何突破语言壁垒?智能翻译跨语言工具的技术实现与场景化解决方案
  • 暗黑破坏神2存档编辑器终极指南:5分钟解放你的游戏体验
  • 26年知网AIGC检测算法大升级,这些变化你知道吗?
  • 游戏开发入门:用GDScript从零构建独立游戏的完整路径
  • ergsegregegeresage -python solve_p1_high.py --max-beta 70 2>1 | tee /home/c/Desktop/mimachan/saiti
  • CSS如何实现水平垂直居中的Logo布局_利用place-items属性
  • Navicat试用期重置技术实现深度解析:macOS环境下的配置清理方案