字符串缓冲区和字符串构造器
一、字符串缓冲区
1.简介:StringBuffer字符串缓冲区,与字符串String不同的是StringBuffer创建后仍能修改,而String创建之后就不能修改。
String s1="123";StringBuffer s2=new StringBuffer("123");System.out.println(s1.hashCode()+" "+s2.hashCode());s1+="456";s2.append("456");System.out.println(s1.hashCode()+" "+s2.hashCode());
48690 118352462
1450575459 118352462输出结果可以说明String对象已经发生变化,StringBuffer没有变化。
其机制是预先申请缓冲区来存储,当存储长度超过缓冲区大小就重新申请新的缓冲区。缓冲区的大小就称作字符串缓冲区的容量,而其中存储的字符个数称为字符串缓冲区的长度。
2.创建
构造方法 | 长度 | 容量 |
public StringBuffer() | 0 | 16 |
public StringBuffer(int capacity) | 0 | capacity |
public StringBuffer(String str) | str.length() | str.length()+16 |
3.操作方法
(1)获得长度 int length().
获得容量 int capacity().
设置容量void ensureCapacity(int minCapacity),若minCapacity小于现有的缓冲区的容量,那么这个方法不起作用,否则就要改变现有的容量,将会是minCapacity和(当前容量)*2+2两个数中较大的一个。
void trimToSize()将容量缩小至与长度相同。
设置长度 void setLength(int newLength),其中参数newLength应该大于等于0,若newLength与现在长度相同,则字符串缓冲区不发生变化;若newLength小于当前长度,则字符串缓冲区只保留前newLength个字符;若newLength大于当前长度,则在后面补上字符'\u0000',其中如果大于容量,需要增加容量,新的容量是newLength与(当前容量)*2+2两个数中较大的一个。
(2)查询字符char charAt(int index)获取第index+1个字符。
设置字符void setCharAt(int index,char ch)将下标为index,第index+1个字符设置为字符ch。
int indexOf(String str)和int indexOf(String str,int fromIndex)、int lastIndexOf(String str)和int lastIndexOf(String str,int fromIndex)情况与字符串完全相同,详情见上篇,但是StringBuffer没有查找参数为字符的情况,只有字符串的情况。
(3)增插删替 这些方法也是主要区别于String的地方,这些方法不用一个新的StringBuffer接受返回值也可,直接调用例如sb.reverse(),字符串缓冲区对象已经发生改变,sb成为倒序。(可有可无)
增加到末尾方法StringBuffer append(Object obj)其实参数几乎可以是任何类型的参数,将其对应的字符串加到字符串缓冲区的末尾,参数需要转化为字符串,转换方法也在上一篇有详细说明。
插入方法StringBuffer insert(int offset,Object obj)第二个参数与append方法参数性质相同,作用在第offset个字符后面插入子符串,例如:
StringBuffer sb=new StringBuffer("123456");StringBuffer sb2=new StringBuffer("000000");sb.insert(0, sb2);System.out.println(sb); //输出000000123456
如果插入字符串后的新长度大于当前容量,则新容量变为现在长度与(当前容量)*2+2两个数中较大的一个。
删除包括删除一段字符串或一个字符。StringBuffer delete(int start,int end)删除下标从start到end-1中的字符序列。StringBuffer deleteCharAt(int index)删除下标为index的字符。
替换StringBuffer replace(int start,int end,String str)指将下标从start到end-1之间的字符串替换为str,若start==end,就变为在与insert(start,str)相同的效果。
StringBuffer sb=new StringBuffer("123456");String s2="&&&";sb.replace(2, 4, s2); //参数只能是Stirng,不能是StringBufferSystem.out.println(sb);
输出12&&&56 容量的设置上还是老办法。
(4)其他方法
逆序排列现有字符串 StringBuffer reverse()
转换为String对象 String toString()
获取子字符串 String substring(int start)和String substring(int start,int end) 取下标start到末尾的字符串以及下标从start到end-1的字符串。
二、字符串构造器StringBuilder
基本上与StringBuffer是一样的,于是字符串缓冲区又多了一种构造方法(你懂的)。唯一的区别就是StringBuilder是线程不安全的,那就到线程时间在说吧。除此之外可能在大部分情况下对于速度来说有:StringBuilder>StringBuffer>String
转载于:https://www.cnblogs.com/lbrs/p/9034001.html
字符串缓冲区和字符串构造器相关推荐
- ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小解决办法
1.今天写的存储过程在执行过程中,报如下错误. exec PRO_T_008pro_update_add_delete(17,1,1,1,1,45.0,54.0,45.0,45.0,45.0,54.0 ...
- StringBuffer(字符串缓冲区)
StringBuffer是一个容器,且长度可变, 可以直接操作多个数据类型,数组只能操作一种 最终结果为字符串 字符串的原理就是通过该类实现的 ---------------------------- ...
- StringBuilder字符串缓冲区
JDK1.5出现StringBuiler:构造一个其中不带字符的字符串生成器,初始容量为 16 个字符.该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候( ...
- string的飞鸽传书字符串缓冲区
一个类似于string的飞鸽传书字符串缓冲区,但不能修改.虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容.可将字符串缓冲区安全地用于多个线程.可以在必要时对 ...
- 生成awr报告时报ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
生成awr报告时报错: ERROR: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小 ORA-06512: 在 "SYS.DBMS_WORKLOAD_REPOSI ...
- 也谈Oracle异常: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
也谈Oracle异常: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小 参考文章: (1)也谈Oracle异常: ORA-06502: PL/SQL: 数字或值错误 : 字符 ...
- 字符串缓冲区StringBuffer类,正则表达式
StringBuffer类 StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容.它是一个容器,容器中可以装很多字符串. ...
- java字符串编程_java字符串抉择
下面我们就字符串连接方面分析. 1.String 打开String的源码,如图所示 会发现存储字符串的字符数值是final常量.再看St final修饰的属性为常量(值不可改变),要么在声明的同时赋值 ...
- java字符串底层实现_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...
Java基础之字符串操作--String 字符串 什么是字符串?如果直接按照字面意思来理解就是多个字符连接起来组合成的字符序列.为了更好的理解以上的理论,我们先来解释下字符序列,字符序列:把多个字符按 ...
- android string拼接字符串_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...
Java基础之字符串操作--String 字符串 什么是字符串?如果直接按照字面意思来理解就是多个字符连接起来组合成的字符序列.为了更好的理解以上的理论,我们先来解释下字符序列,字符序列:把多个字符按 ...
最新文章
- 第十五篇、程序返回前台的时间差(常用于显示广告)
- 关于团队建设,穆帅能教我们什么?
- H5活动刮刮卡功能的实现与注意事项
- 给 IConfiguration 写一个 GetAppSetting 扩展方法
- HH SaaS电商系统的商品营销服务功能模块设计
- java循环一年月份天数和_javawhile循环编写输入某年某月某日,判断这一天是这一年的第几…...
- LeetCode 958. 二叉树的完全性检验(层序遍历)
- python目标检测答案_入门指南:用Python实现实时目标检测(内附代码)
- 青海师大c语言研究生专业课,2016年青海师范大学计算机应用技术C语言程序设计考研复试题库...
- ————————————————————————动态规划——————————————————————1003——————————...
- springboot使用Freemarker继承
- Nodejs动态加载路由,Nodejs遍历目录,Nodejs路由工具
- 计算机组成原理白中英第四章,白中英计算机组成原理第四章答案.ppt
- 统信操作系统UOS上手操作与初体验、功能测试
- wifi ap6212驱动移植及调试分析技术笔记
- 【Kay】MySQL必会常用函数
- radix-tree算法浅析--从不懂到装懂
- c语言弹出文本框,微信小程序弹出文本输入框
- 历史上的今天:大型计算机先驱和小型机之父诞生;中国雅虎邮箱成历史
- 芯片解密STM32F100VB 芯片基本特性
热门文章
- linux 进程 D 状态,Linux 进程的 Uninterruptible sleep(D) 状态
- itext生成pdf间距_java将html转为pdf
- LRU算法的一种实现方法
- 【生信进阶练习1000days】day16~day22-RNA-seq data analysis with limma edgeR and Glimma
- slopShell:强大的PHP Webshell
- 神经网络与深度学习第5章:卷积神经网络 阅读提问
- 高中会教师证有计算机专业吗,教师资格证 --高中信息技术篇
- html中父子元素的解释,CSS 子绝父相 理解
- python 链接spark_Spark大数据分布式处理实战:一文带你走进大数据世界
- mysql登录出现1045错误