说明

StringBuffer和StringBuilder的常用方法几乎相同,这里合并在一起讲了,以StringBuffer为例讲述一下它们的常用方法

总体方法一览

以StringBuffer为例

image-20220831204353889

其中部分方法已经在String类常用方法详解中讲过了,这里就不讲了,只讲一些没有讲过的,比较常用的方法

请参考:String类常用方法详解

append

功能划分

追加字符/字符串到StringBuffer上

返回值为自身

有很多重载类型,根据重载类型可以分为三组

  • 第一组:追加单个类型
  • 第二组:追加字符数组char[],通过offset偏移量和追加长度指定追加的字符串
  • 第三组:通过[start,end)来指定追加到StringBuffer的字符串

image-20220831210243775

第一组

追加单个类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 定义一个空的StringBuffer
StringBuffer stringBuffer = new StringBuffer();
// 字符串:将"ikun"追加到stringBuffer
System.out.println(stringBuffer.append("ikun"));
// 基本数据类型(int):将6追加到stringBuffer
System.out.println(stringBuffer.append(6));
// 基本数据类型(boolean):将true追加到stringBuffer
System.out.println(stringBuffer.append(true));
// 基本数据类型(char):将'!'追加到stringBuffer
System.out.println(stringBuffer.append('!'));
// 基本数据类型(float):将8.8追加到stringBuffer
System.out.println(stringBuffer.append(8.8F));
// 字符数组:将{'a', 'b', 'c'}追加到stringBuffer
// 其他重载形式类推
System.out.println(stringBuffer.append(new char[]{'a', 'b', 'c'}));
// 输出
// ikun
// ikun6
// ikun6true
// ikun6true!
// ikun6true!8.8
// ikun6true!8.8abc

第二组

追加字符数组char[],通过offset偏移量和追加长度指定追加的字符串

1
2
3
4
5
6
// 定义一个空的StringBuffer
StringBuffer stringBuffer = new StringBuffer();
// 字符串:将"我是祖国的花朵"字符数组传入stringBuffer,指定offset=2,len=3
System.out.println(stringBuffer.append(new char[]{'我', '是', '祖', '国', '的', '花', '朵'}, 2, 3));
// 结果
// 祖国的

第三组

通过[start,end)来指定追加到StringBuffer的字符串

1
2
3
4
5
6
// 定义一个空的StringBuffer
StringBuffer stringBuffer = new StringBuffer();
// 字符串:将"我是祖国的花朵"的[2,5)位置追加到stringBuffer后面
System.out.println(stringBuffer.append(new String("我是祖国的花朵"), 2,5));
// 输出
// 祖国的

delete

删除StringBuffer中在[start, end)的内容

public synchronized StringBuffer delete(int start, int end)

1
2
3
4
5
6
// 定义"唱跳rap打篮球"stringBuffer字符串
StringBuffer stringBuffer = new StringBuffer("唱跳rap打篮球");
// 删除"唱跳rap打篮球"在[2,5)的内容
System.out.println(stringBuffer.delete(2, 5));
// 结果
// 唱跳打篮球

deleteCharAt

删除StringBuffer指定index的字符

返回值为自身

public synchronized StringBuffer deleteCharAt(int index)

1
2
3
4
5
6
// 定义"唱跳rap打篮球"stringBuffer字符串
StringBuffer stringBuffer = new StringBuffer("唱跳rap打篮球");
// 删除"唱跳rap打篮球"stringBuffer中index=1位置的字符
System.out.println(stringBuffer.deleteCharAt(1));
// 结果
// 唱rap打篮球

insert

功能划分

insert用于将字符/字符串插入StringBuffer里面

有很多重载形式,可以分为以下两组

  • 第一组:在指定offset位置插入待插入数据的整体到StringBuffer中
  • 第二组:在指定offset位置插入待插入数据的部分到StringBuffer中

image-20220901075407795

第一组

在指定offset位置插入待插入数据的整体到StringBuffer中

1
2
3
4
5
6
// 定义一个值为"StringBuffer"的字符串
StringBuffer stringBuffer = new StringBuffer("StringBuffer");
// 在offset=6的位置插入"String"字符串
// 其他情况类推
System.out.println(stringBuffer.insert(6, "String"));
// 结果:StringStringBuffer

第二组

插入字符数组char[] str,通过指定offset和len来指定要插入到StringBuffer的内容

1
2
3
4
5
6
// 定义一个值为"StringBuffer"的字符串
StringBuffer stringBuffer = new StringBuffer("StringBuffer");
// 插入字符数组{'h', 'a', 'p', 'p', 'y'}到StringBuffer index = 6位置,指定offset = 2,len = 2
System.out.println(stringBuffer.insert(6, new char[]{'h', 'a', 'p', 'p', 'y'}, 2, 2));
// 输出结果
// StringppBuffer

插入实现CharSequence接口的对象,如String、StringBuffer、StringBuilder等,通过指定start和end来指定要插入到StringBuffer的内容

1
2
3
4
5
6
// 定义一个值为"StringBuffer"的字符串
StringBuffer stringBuffer = new StringBuffer("StringBuffer");
// 插入字符串"happy"到StringBuffer index = 6 的位置,指定start = 2, end = 4
System.out.println(stringBuffer.insert(6, "happy", 2, 4));
// 输出结果
// StringppBuffer

reverse

可以翻转StringBuffer字符串

public synchronized StringBuffer reverse()

返回值为翻转后的字符串,也即自身

1
2
3
4
5
6
// 定义一个值为"StringBuffer"的字符串
StringBuffer stringBuffer = new StringBuffer("StringBuffer");
// 翻转
System.out.println(stringBuffer.reverse());
// 输出结果
// reffuBgnirtS

appendCodePoint

可以将数字编号对应的Unicode字符编码追加到StringBuffer后面

public synchronized StringBuffer appendCodePoint(int codePoint)

1
2
3
4
5
6
7
// 定义一个空的StringBuffer
StringBuffer stringBuffer = new StringBuffer();
// 猜猜看这个结果是什么?
stringBuffer.appendCodePoint(74).appendCodePoint(65).appendCodePoint(86).appendCodePoint(65);
System.out.println(stringBuffer);
// 输出结果
// JAVA

subSequence

这个可以返回一个StringBuffer子串

和subString的区别就是这个的返回值为CharSequence,通用性更高

public synchronized CharSequence subSequence(int start, int end)

1
2
3
4
5
6
// 定义一个StringBuffer字符串
StringBuffer stringBuffer = new StringBuffer("javac++");
// 截取[3, 5)的子串
System.out.println(stringBuffer.subSequence(3, 5));
// 输出结果
// ac

deleteCharAt

删除StringBuffer指定索引的字符

返回删除后的StringBuffer

public synchronized StringBuffer deleteCharAt(int index)

1
2
3
4
5
6
// 定义一个StringBuffer字符串
StringBuffer stringBuffer = new StringBuffer("javac++");
// 删除index = 3的字符
System.out.println(stringBuffer.deleteCharAt(3));
// 输出结果
// javc++