基础数据类型之AbstractStringBuilder
String内部是一个private final char value[];
也就意味着每次调用的各种处理方法,返回的字符串都是一个新的,性能上,显然....
所以,对于可变字符序列的需求是很明确的
属性简介
属性获取
既然是内部维护了字节数组
必然这个数组本身属性,长度 ,使用个数的获取,以及数组的扩大也有相对应的方法可以使用
添加方法
就像我们刚才说的那样,添加元素,分为尾部追加元素和中间插入元素
添加元素的方法也分为了两大阵营
AbstractStringBuilder append(Object obj) | AbstractStringBuilder insert(int offset, Object obj) |
AbstractStringBuilder append(boolean b) | AbstractStringBuilder insert(int offset, boolean b) |
AbstractStringBuilder append(char c) | AbstractStringBuilder insert(int offset, char c) |
AbstractStringBuilder append(int i) | AbstractStringBuilder insert(int offset, int i) |
AbstractStringBuilder append(long l) | AbstractStringBuilder insert(int offset, long l) |
AbstractStringBuilder append(float f) | AbstractStringBuilder insert(int offset, float f) |
AbstractStringBuilder append(double d) | AbstractStringBuilder insert(int offset, double d) |
AbstractStringBuilder append(CharSequence s) | AbstractStringBuilder insert(int dstOffset, CharSequence s) |
AbstractStringBuilder append(CharSequence s, int start, int end) |
AbstractStringBuilder insert(int dstOffset, CharSequence s,int start, int end)
|
AbstractStringBuilder append(char[] str) | AbstractStringBuilder insert(int offset, char[] str) |
AbstractStringBuilder append(char str[], int offset, int len) |
AbstractStringBuilder insert(int index, char[] str, int offset, int len)
|
AbstractStringBuilder append(String str) | AbstractStringBuilder insert(int offset, String str) |
AbstractStringBuilder append(StringBuffer sb) | |
AbstractStringBuilder appendCodePoint(int codePoint) |
从上表可以看得出来,给各种数据类型都提供了append和insert方法 |
对于insert 是插入,既然是插入,那么就需要指定位置 所以与append对应的方法的方法签名上,都多了一个索引 |
所有的方法的返回类型都是AbstractStringBuilder 其实都是 return this; 因为他是可变的,所以变化直接体现在了this中,所以返回this就好了 |
appendCodePoint(int codePoint) 与 append(char c) 可以说是一样的 但是对于辅助平面显然又不一样,char不支持辅助平面 |
获取方法
获取代码点
代码点相关的五个方法
charAt(int) / codePointAt(int) / codePointBefore(int) / codePointCount(int, int) / offsetByCodePoints(int, int)
他们与String中的是一模一样的,代码也是一样的(就有个变量名变动)
|
复制
getChars(int, int, char[], int)
将字符从此序列复制到目标字符数组 dst 与String中的方法也几乎一致
|
索引下标
int indexOf(String str)
int indexOf(String str, int fromIndex)
|
第一次出现的指定子字符串在该字符串中的索引 可以指定索引 指定索引就从索引处开始查找匹配 满足的条件为startsWith true (并且在范围内 如果有设置) |
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)
|
返回最右边出现的指定子字符串在此字符串中的索引 也就是最后一个 可以指定索引 指定索引就从索引处 反向匹配 满足的条件也是startsWith true (并且在范围内 如果有设置) |
获取子串
更新方法
删除方法
其他方法
reverse() 按照字符进行翻转 |
将此字符序列用其反转形式取代 就是翻转每一个char,注意可不是翻转比特位,也不是翻转字节,反转的是代码单元 不过对于辅助平面的字符的代码点,他们会按照字符进行翻转,也就是高代理低代理顺序不会改变 |
执行操作前未成对的低代理项和高代理项将成为代理项对 例如,反转 "\uDC00\uD800" 将生成有效的代理项对 "\uD800\uDC00" |
总结
如同我们上面说的,AbstractStringBuilder就是 可变 字符序列的一个纲领
它规定了可变字符序列应该有的行为
比如 添加字符/删除字符/更新字符/获取字符
因为可变,所以对于可变的支持,自然是必不可少的
另外,他作为String在很多方面的一个替代,必然也是提供了String的一些功能方法
否则与String API 变化巨大 也是毫无意义
因为毕竟本身就是为了描述字符序列
所以对于AbstractStringBuilder 只需要彻底理解了他作为 可变字符序列的标准接口即可
分类:
Java基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现