【Java StringBuffer类 +案例】

StringBuffer类

在 Java中,除了通过 String 类创建和处理字符串还可以使用 StringBuffer 类来处理字符串。StringBuffer 类可以比 String 类更高效地处理字符串。

StringBuffer 类是可变字符串类,创建 StringBuffer 类的对象后可以随意修改字符串的内容。每个 StringBuffer 类的对象都能够存储指定容量的字符串,如果字符串的长度超过了 StringBuffer的容量,则该对象的容量会自动扩大。

为了解决String字符串操作导致的内存冗余,提高效率,Java中提供了StringBuffer和StringBuilder来操作字符串,并且提供了很多方法,便于程序员开发。
StringBuffer和StringBuilder中都有char类型可变长数组作为字符串的保存空间。使用到的方法类型和ArrayList类似。

创建StrngBuffer类的对象(构造方法)

StringBuffer() 构造一个空的字符串缓冲区,并且初始化为 16 个字符的容量。

StringBuffer str1 = new StringBuffer();

StringBuffer(int length) 创建一个空的字符串缓冲区,并且初始化为指定长度 length 的容量。

StringBuffer str2 = new String Buffer(12);

StringBuffer(String str) 创建一个字符串缓冲区,并将其内容初始化为指定的字符串内容 str,字符串缓冲区的初始容量为 16 加上字符串 str 的长度。

StringBuffer str3 = new StringBuffer("我叫妍妍的琪");
StringBuffer中方法的使用
StringBuffer中提供添加,插入,设定指定位置字符以及长度的方法

StringBuffer的主要StringBufferappendinsert方法,它们被重载以便接受任何类型的数据。 每个都有效地将给定的数据转换为字符串,然后将该字符串的字符附加或插入到字符串缓冲区。 append方法总是在缓冲区的末尾添加这些字符; insert方法将insert添加到指定点。

返回值方法作用
StringBufferappend(boolean b)boolean参数的字符串表示附加到序列中。
StringBufferappend(char c)char参数的字符串表示附加到此序列。
StringBufferappend(char[] str)char数组参数的字符串表示附加到此序列。
StringBufferappend(char[] str, int offset, int len)char数组参数的子阵列的字符串表示附加到此序列。
StringBufferappend(CharSequence s)追加指定的 CharSequence到这个序列。
StringBufferappend(String str)将指定的字符串附加到此字符序列。
StringBufferappend(StringBuffer sb)将指定 StringBuffer这个序列。
StringBufferinsert(int offset, boolean b)在此序列中插入 boolean参数的字符串表示形式。
StringBufferinsert(int offset, char c)在此序列中插入 char参数的字符串表示形式。
StringBufferinsert(int index, char[] str, int offset, int len)在此序列中插入 str数组参数的子阵列的字符串表示形式。
StringBufferinsert(int offset, String str)将字符串插入到此字符序列中。
。。。。。。。。。
voidsetCharAt(int index, char ch)指定索引处的字符设置为 ch
voidsetLength(int newLength)设置字符序列的长度。

案例

	StringBuffer sb=new StringBuffer();
	sb.append("hello");
	sb.append(1);
	sb.append(1.2);
	sb.append(true);
	System.out.println(sb);
	
	sb.append("hello").append(1).append(1.2).append(true);
	System.out.println(sb);

	sb.insert(5, 22222);
	System.out.println(sb);

StringBuffer中的方法获取容量,字符串长度,字符在字符串中出现的位置功能的方法
返回值方法作用
intcapacity()返回当前容量。
intlength()返回长度(字符数)。
charcharAt(int index)返回 char在指定索引在这个序列值。
intcodePointAt(int index)返回指定索引处的字符(Unicode代码点)。
intcodePointBefore(int index)返回指定索引之前的字符(Unicode代码点)。
intcodePointCount(int beginIndex, int endIndex)返回此序列指定文本范围内的Unicode代码点数。
intindexOf(String str)返回指定子字符串第一次出现的字符串内的索引。
intindexOf(String str, int fromIndex)返回指定子串的第一次出现的字符串中的索引,从指定的索引开始。
intlastIndexOf(String str)返回指定子字符串最右边出现的字符串内的索引。
intlastIndexOf(String str, int fromIndex)返回指定子字符串最后一次出现的字符串中的索引。
intoffsetByCodePoints(int index, int codePointOffset)返回此序列中与 indexcodePointOffset代码点偏移的索引。
StringBuffer中的方法删除,与复制功能的方法
返回值方法作用
StringBufferdelete(int start, int end)删除此序列的子字符串中的字符。
StringBufferdeleteCharAt(int index)删除 char在这个序列中的指定位置。
voidgetChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)字符从该序列复制到目标字符数组 dst

案例

	StringBuffer sb= new StringBuffer();
	sb.append("hello").append("world").append("java");
	System.out.println(sb);
	//helloworldjava
	sb.delete(0, 5);
	System.out.println(sb);
	//worldjava
	sb.deleteCharAt(0);
	System.out.println(sb);
	//orldjava
	sb.delete(0, sb.length());
	sb
	System.out.println("sb"+sb);

StringBuffer中的方法替换,倒序功能的方法
返回值方法作用
StringBufferreplace(int start, int end, String str)用指定的String中的字符替换此序列的子字符串中的 String
StringBufferreverse()导致该字符序列被序列的相反代替。

案例

	StringBuffer sb=new StringBuffer();
	sb.append("hello").append("world").append("java");
	sb.replace( 0, 5, "啦啦啦");
	System.out.println(sb);//啦啦啦worldjava

	StringBuffer sb=new StringBuffer();
	sb.append("hello");
	sb.reverse();
	System.out.println(sb);//olleh
StringBuffer中的方法截取,返回该字符串功能的方法
返回值方法作用
CharSequencesubSequence(int start, int end)返回一个新的字符序列,该序列是该序列的子序列。
Stringsubstring(int start)返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。
Stringsubstring(int start, int end)返回一个新的 String ,其中包含此序列中当前包含的字符的子序列。
StringtoString()返回表示此顺序中的数据的字符串。

案例:

	StringBuffer sb =new StringBuffer();
	sb.append("hello").append("world").append("java");
	String s=sb.substring(5);
	System.out.println(s);//worldjava
	String ss=sb.substring(5, 10);
	System.out.println(ss);//world

StringBuilder类

StringBuilder 对字符串的操作是直接改变字符串对象本身,而不是生成新的对象,所以新能开销小。

与StringBuffer相比StringBuilder的性能略高(15%~30%),StringBuffer为保证多线程情况下的安全性(synchronize加锁)而牺牲了性能,以时间来换取安全。而StringBuilder则没有保证线程的安全,从而性能略高于StringBuffer。

频繁使用字符串拼接的时候可以用StringBuilder(推荐)或者StringBuffer。

面试题: String,StringBuffer,StringBuilder的区别?

String 字符串常量,不可变,使用字符串拼接时是不同的 2 个空间

StringBuffer 字符串变量,可变,线程安全,字符串拼接直接在字符串后追加

StringBuilder 字符串变量,可变,非线程安全字符串拼接直接在字符串后追加

1.StringBuilder 执行效率高于 StringBuffer 高于 String.

2.String 是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象,

StringBuffer 和 StringBuilder 都是可变的,当进行字符串拼接时采用 append 方法,在原来的

基础上进行追加,所以性能比 String 要高,又因为 StringBuffer 是线程安全的而 StringBuilder

是线程非安全的,所以 StringBuilder 的效率高于 StringBuffer.

3.对于大数据量的字符串的拼接,采用 StringBuffer,StringBuilder.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值