StringBuilder详解

2023-11-15

1、简介

StringBuilder和StringBuffer一样,都是继承自抽象类AbstractStringBuilder类,也是一个可变的字符序列。StringBuilder和StringBuffer非常相似,甚至有互相兼容的API,不过,StringBuilder不是线程安全的,这是和StringBuffer的主要区别。StringBuilder的层次结构如下:

StringBuilder类被设计成在不需要多线程安全的情况下替换StringBuffer类的。如果程序中不需要多线程安全,推荐使用StringBuilder类,因为没有了同步的操作而速度上比较快。

StringBuilder和StringBuffer一样,主要的操作有append和insert等。

2、StringBuilder原理


StringBuilder的原理和StringBuffer一样,不同之处在于StringBuilder不需要考虑线程安全。具体的原理参见另一篇StringBuffer详解


3、常用方法

StringBuilder的常用方法和StringBuffer的一样。列出如下:

(1)构造函数

StringBuilder有四个构造函数:

  • StringBuilder() value内容为空,并设置容量为16个字节;
  • StringBuilder(CharSequece seq)  使用seq初始化,容量在此基础上加16;
  • StringBuilder(int capacity) 设置特定容量;
  • StringBuilder(String str)  使用str初始化,容量str大小的基础上加16;

(2)append方法

由于继承了Appendable接口,所以要实现append方法,StringBuilder类对几乎所有的基本类型都重载了append方法:

  • append(boolean b)
  • append(char c)
  • append(char[] str)
  • append(char[] str,int offset,int len)
  • append(CharSequence s)
  • append(CharSequence s,int start,int end)
  • append(double d)
  • append(float f)
  • append(int i)
  • append(long lng)
  • append(Object obj)
  • append(String str)
  • append(StringBuffer sb)

(3)insert方法

insert方法可以控制插入的起始位置,也几乎对所有的基本类型都重载了insert方法:

  • insert(int offser,boolean b)
  • insert(int offset,char c)
  • insert(int offset,char[] str)
  • insert(int index,char[] str,int offset,int len)
  • insert(int dsfOffset,CharSequence s)
  • insert(int dsfOffset,CharSequence s,int start,int end)
  • insert(int offset,double d)
  • insert(int offset,float f)
  • insert(int offset,int i)
  • insert(int offset,long l)
  • insert(int offset,Object obj)
  • insert(int offset,String str)

(4)其它会改变内容的方法

上面的那些方法会增加StringBuilder的内容,还有一些方法可以改变StringBuilder的内容:

  • StringBuilder delete(int start,int end) 删除从start到end(不包含)之间的内容;
  • StringBuilder deleteCharAt(int index) 删除index位置的字符;
  • StringBuilder replace(int start,int end,String str) 用str中的字符替换value中从start到end位置的子序列;
  • StringBuilder reverse() 反转;
  • void setCharAt(int index,char ch) 使用ch替换位置index处的字符;
  • void setLength(int newLength) 可能会改变内容(添加'\0');

(5)其它常用方法

下面这些方法不会改变内容:

  • int capacity() 返回value的大小即容量;
  • int length() 返回内容的大小,即count;
  • char charAt(int index) 返回位置index处的字符;
  • void ensureCapacity(int minimumCapacity) 确保容量至少是minimumCapacity;
  • void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin) 返回srcBegin到srcEnd的字符到dst;
  • int indexOf(String str) 返回str第一次出现的位置;
  • int indexOf(String str,int fromIndex) 返回从fromIndex开始str第一次出现的位置;
  • int lastIndexOf(String str) 返回str最后出现的位置;
  • int lastIndexOf(String str,int fromIndex) 返回从fromIndex开始最后一次出现str的位置;
  • CharSequence subSequence(int start,int end) 返回字符子序列;
  • String substring(int start) 返回子串;
  • String substring(int start,int end) 返回子串;
  • String toString() 返回value形成的字符串;
  • void trimToSize() 缩小value的容量到真实内容大小;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

StringBuilder详解 的相关文章

  • Java中的String,StringBuilder,StringBuffer三者的区别

    最近在学习Java的时候 xff0c 遇到了这样一个问题 xff0c 就是String StringBuilder以及StringBuffer这三个类之间有什么区别呢 xff0c 自己从网上搜索了一些资料 xff0c 有所了解了之后在这里整
  • String和Stringbuff和Stringbuilder区别

    string类型属于引用类型 xff0c 不属于八个基本变量 每次指定一个String a 61 34 a 34 时 xff0c jvm会在内存中新建一个对象 xff0c 当你再给a赋值的时候 xff0c jvm并没有改变a引用的值 xff
  • 简单一行代码解决流读取导致StringBuilder.toString()乱码问题

    今天做上传功能代码读取返回值得时候 StringBuilder toString 出现乱码的情况 在网上找了一堆乱七八糟的办法 繁琐不说 代码还好几行 后来看到String类构造自己就有办法解决这个问题 简单一行代码搞定 在这里记录一下 S
  • 对于长度变化很大的输入,最佳 StringBuffer 初始容量是多少?

    大家下午好 我正在使用java lang StringBuilder来存储一些字符 我不知道要提前存储多少个字符 除了 60 的情况下 它只有 恰好 7 个字符 39 的情况下 它 大约 为 3500 个字符 1 的情况下 大约是 20k
  • 按值传递(StringBuilder 与 String)[重复]

    这个问题在这里已经有答案了 我不懂为什么System out println 名称 输出Sam不受方法的 concat 函数的影响 而System out println 名称 输出Sam4作为该方法的追加方法的结果 为什么 StringB
  • 如何从 PInvoke 本机回调返回 StringBuilder 或其他字符串缓冲区

    我想要一种干净的方法来增加本机代码填充所需的 StringBuilder 的大小 下面的回调方法看起来很干净 但不知何故我们得到了缓冲区的副本而不是实际的缓冲区 我感兴趣解释和解决方案 最好坚持回调类型分配 因为如果它可以工作的话 它会很好
  • Java中String和StringBuffer有什么区别?

    Java中String和StringBuffer有什么区别 字符串有最大大小吗 String用于操作不可更改的字符串 只读且不可变 StringBuffer用于表示可以修改的字符 性能方面 StringBuffer执行串联时速度更快 这是因
  • 字符串生成器与列表

    我正在读取包含数百万行的多个文件 并且正在创建具有特定问题的所有行号的列表 例如 如果特定字段留空或包含无效值 所以我的问题是 跟踪可能超过一百万行的数字列表的最有效的日期类型是什么 使用字符串生成器 列表或其他东西会更有效吗 我的最终目标
  • StringBuilder 在 C# 内部如何工作?

    如何StringBuilder work 它有什么作用内部 它使用不安全的代码吗 为什么它这么快 与 操作员 当您使用 运算符构建字符串时 string s 01 s 02 s 03 s 04 然后 在第一次串联时 我们创建一个长度为 4
  • HashMap 中的重复值

    我遇到了大麻烦 创建了一个 hashMap 并使用相同的键插入了两个值 StringBuilder作为map的键 现在 虽然尝试使用 StringBuilder 对象检索数据工作正常 但在其他情况下它无法返回任何值 我在下面给出的代码中列出
  • 何时使用 StringBuilder? [复制]

    这个问题在这里已经有答案了 可能的重复 字符串与 StringBuilder 我刚刚重温了一些我用来学习 VB NET 的书籍 我不确定我是否已经理解了这一点 了解 StringBuilder 是如何 什么的 使用指导是什么 如果您要连接
  • 删除 StringBuilder 的最后一个字符?

    当您必须循环遍历集合并使用分隔符分隔每个数据的字符串时 最后总会有一个额外的分隔符 例如 for String serverId serverIds sb append serverId sb append 给出类似的东西 服务器Id 1
  • StringBuilder和容量?

    我已经创建了测试应用程序来测试 StringBuilder 是否将数据复制到另一个实例并在其长度超过当前容量时增加其缓冲区并在 ildasm exe 中进行验证 但它看起来相同 如何验证 StringBuilder 将其数据复制到新实例中并
  • 如何在 StringBuilder 上检查 null?

    我想在我的代码中专门检查 null 或空 空和空是否相同StringBuilder在Java中 例如 StringBuilder state new StringBuilder StringBuilder err new StringBui
  • 将 null 分配给finally块中的变量[重复]

    这个问题在这里已经有答案了 下面这段代码的输出是 Test Passed 有人可以向我解释为什么吗 public class Test public static void main String args System out print
  • P/调用传递给 StringBuilder 的函数

    在 C 文件中我有一个 class Archiver DllImport Archiver dll public static extern void archive string data StringBuilder response 字
  • StringBuilder.ToString() 的复杂性是多少

    在 C 中 复杂度是多少StringBuilder ToString 是 O 1 O N 还是其他 不同框架版本有所不同 在旧版本中StringBuilder工作于string直接 所以没有额外费用 ToString 它只是直接向您提供数据
  • 如何在java 1.8中的reduce方法中使用StringBuilder?

    String s apples for you StringBuilder returnString new StringBuilder Arrays stream s split reduce returnString acc str g
  • for循环中的Qt字符串生成器

    下列的this http labs qt nokia com 2011 06 13 string concatenation with qstringbuilder and this http doc snapshot qt project
  • 字符串转义为 XML 属性

    我看了一下字符串转义为 XML https stackoverflow com questions 1132494 string escape into xml并发现它非常有用 我想做类似的事情 转义要在 XML 属性中使用的字符串 该字符

随机推荐

  • 【踩坑经历】Java Long 类型传给前端损失精度的问题

    最近在做一个 SpringBoot Vue 的项目 持久层框架用的是 MyBatis Plus 然后遇到了一个问题 一起来看下怎么回事 这个项目就是一个文章收藏器 可以收藏一些技术文章 然后可以选择星标 以便查找这篇文章 那么点击星标的按钮
  • 服务器的tomcat调优和jvm调化

    下面讲述的是tomcat的优化 及jvm的优化 Tomcat 的缺省配置是不能稳定长期运行的 也就是不适合生产环境 它会死机 让你不断重新启动 甚至在午夜时分唤醒你 对于操作系统优化来说 是尽可能的增大可使用的内存容量 提高CPU 的频率
  • 操作系统12----进程间通信IPC

    进程间通信IPC 1 进程通信 IPC Inter Process Communication 1 1直接通信 1 2间接通信 1 3阻塞通信 1 4非阻塞通信 2 信号 Signal 3 管道 pipe 4 消息队列 5 共享内存 1 进
  • 基于面板数据的熵值法介绍与实现

    熵值法是一种基于信息熵理论的客观赋值方法 即数据越离散 所含信息量越多 对综合评价影响越大 目录 一 基于面板数据熵值法介绍 二 R语言实现 参考文献 一 基于面板数据熵值法介绍 传统的熵值法有个弊端 只能针对于截面数据 即根据某一年 k
  • MySQL创建表时提示:1067 - Invalid default value for ‘sex‘

    问题 在创建表的时候如果有中文 则会提示 1067 Invalid default value for sex 比如 创建信息表 create table userInfo card id int primary key auto incr
  • unity 内嵌网页简单流程(3D WebView 3.14.1)

    我是用于 web 平台 特此记录 3D WebView 主要实现在unity 中制作网页浏览器 可使用平台 很强大 其他类似插件都有平台缺陷 Android iOS UWP Hololens Windows macOS WebGL 0 插件
  • 制造行业主数据同步集成

    主数据是描述企业核心业务实体的数据 是企业核心业务的主要构成 各个订单 合同以及业务的主体 在企业内部被重复 共享应用的数据 主数据跨越企业各个业务部门以及各类业务系统 是应用系统间数据交互的基础 近期一直北方某制造业进行主数据治理工作 谈
  • React Router源码解析

    虽然React Router已经到了V6版本了 但在我们项目中 目前主要用的还是React Router的V5版本 所以此处我们从V5版本着手 去了解前端路由的实现原理 目标 希望收获 前端路由的基本原理 React Router 的实现原
  • Scanner的.next()以及.nextLine()各自代表什么意思

    String str new Scanner System in nextLine String str new Scanner System in next next 方法一次读取一个无间隔子串 比如 TAB 空格 回车符 的时候 会终止
  • Chromium OS 初体验

    Chromium OS可是早有耳闻 但是一直没有尝试 最近很多评论甚至认为会对Windows和Mac都能够造成压力 于是迫不及待的想尝试一下了 百度下了官网 官网很贴心 不光给了用于写入U盘的镜像文件 最初是针对上网本的 所以自然不是刻录成
  • Python 基础知识6 字典

    字典 定义字典 d key1 22 key2 meng print d print type d 访问字典里的值 dict Name Runoob Age 7 Class First print dict Name dict Name pr
  • 在Unity中编写单元测试

    最近在我忙于我的最新项目时 我一直在思考 我如何能单元测试代码 我知道如果我先把它搁一边 在编写一大段游戏代码后 我可能再也不会回头来写测试了 编写单元测试对我有两个挑战 首先 游戏不同于其他类型的软件 没有好的代码分段来处理好输入 以及图
  • Hello World

    编写思路 创建 Java 源文件 将源文件编译为 class 文件 运行 class 文件 编写代码 代码块 我的第一个 Java 程序 class 类 Java 程序基本组成单位 HelloWorld 为类的名称 public class
  • 企业微信自建内部应用Demo源码,附在线Demo及视频讲解,创建测试公司及测试应用简单配置即可使用

    自建内部应用Demo源码 前端vite vuejs https github com liyuexi qywx vuejs qywx vuejs 企业微信自建内部应用demo源码前端vite vuejs https github com l
  • 最简单的实现[三栏布局中间自适应]方法

    一 float margin 左盒子 左浮动 右盒子 右浮动 中间盒子 左右加margin 注意 盒子的书写顺序是左右中 div class container div class left w div div class right w
  • docker 安装 nginx1.23.2

    注意 nginx 不能提前挂载配置 html 目录可以提前挂载 但提前挂载了访问默认nginx页面就没有了 部署前端时可提前挂载 所以我们先提前创建副本 1 提前创建挂载文件 创建容器副本 主要作用与获取配置文件 先创建一个没有的nginx
  • 错误隐藏学习手记(五)

    在H 264的研究中 我们可以看到目前有三种开源编码 很多测试都是在一个开源编码中实现的 这个开源编码就叫做 JM86 在这里呢具体介绍一下这三种开源编码 一 三大开源编码器介绍 1 JM H 264的官方测试源码 由德国hhi研究所负责开
  • oracle提高数据移植速度.

    author skatetime 2008 07 21 提高数据移植速度 序列也能影响数据迁移的速度 1 测试表 test skate1 SQL gt select count from test skate1 COUNT 5841920
  • python-kafka多线程快速读取consumer消费者数据,同时使用批读取与无限流读取改进

    python单线程循环读取consumer会很浪费时间 而且速率远远低于生产者可容纳的速率 因此我们使用多线程来处理IO密集型的读取操作 文章目录 极简的示例 1 生产者 先运行 2 消费者部分多线程读取 消费者改进 1 批次读取 并将读取
  • StringBuilder详解

    1 简介 StringBuilder和StringBuffer一样 都是继承自抽象类AbstractStringBuilder类 也是一个可变的字符序列 StringBuilder和StringBuffer非常相似 甚至有互相兼容的API