StringBuilder
概述
StringBuilder
是一个单线程,并且线程不安全的可变的字符串类。StringBuilder
的主要操作和StringBuffer
很相像,本质上也是一个操作字符串的Java类,和StringBuffer有性能上的差异。核心方法是 append
和 insert
方法,并且具有多种重载的形式,参数接受任意类型的数据。每个方法都能将指定的数据转换为字符串,然后将该数据的字符追加或插入到字符串生成器中。append
方法始根据指定的字符添加到对象的末尾,而 insert
方法则在指定的索引区间添加字符。
方法演示
append
@Test
public void append() {
StringBuilder builder = new StringBuilder();
System.out.println(
builder
.append(123) // int类型
.append('c') // char类型
.append(1.2f) // float类型
.append(1.2d) // double类型
.append(123L) //Long类型
.append(false) //布尔类型
.append(new char[]{'c','h','a','r'}) //字符数组类型
.append(Arrays.toString(new Object[]{123})) //对象类型数组
.append("string") //传入String字符串类型
.append(new StringBuffer("obj")) //创建一个匿名StringBuffer对象
.append(new char[]{'c','h','a','r'},0,2) //获取char型数组0-2索引之间的字符
.append("CharSequence",0,2) //获取0-2索引区间的字符
);
}
insert
@Test
public void insert() {
StringBuilder builder = new StringBuilder("Builder");
System.out.println(
builder
.insert(7, 1) // int类型参数
.insert(8,'c') //char类型参数
.insert(9,1L) // long类型参数
.insert(10,1.2f) //float 类型参数
.insert(13,1.2) // double类型参数
.insert(16,true) //boolean类型参数
.insert(20,new char[]{'c','h','a','r'}) //char型数组参数
.insert(24, Arrays.toString(new Object[]{"obj"})) //对象类型参数
//char型数组参数,并截取指定区间的字符
.insert(29,new char[]{'c','h','a','r'},0,2)
.insert(31,"str") // String字符串类型参数
);
}
delete
@Test
public void delete() {
//delete: 删除指定区间的字符
StringBuilder builder = new StringBuilder("builder");
//删除0-4号索引区间的字符
System.out.println(builder.delete(0, 4));
}
deleteCharAt
@Test
public void deleteCharAt() {
//deleteCharAt: 删除指定索引位置的字符
StringBuilder builder = new StringBuilder("builder");
System.out.println(builder.deleteCharAt(6));
}
replace
@Test
public void replace() {
//replace: 替换指定索引区间的字符
StringBuilder builder = new StringBuilder("builder");
System.out.println(builder.replace(5, 7, "ies"));
}
reverse
@Test
public void reverse() {
//reverse: 反转字符串
StringBuilder builder = new StringBuilder("builder");
System.out.println(builder.reverse());
}
capacity
@Test
public void capacity() {
//capacity: 获取字符串长度,默认长度为16
StringBuilder builder = new StringBuilder("builder");
System.out.println(builder.capacity());
}
getChars
@Test
public void getChars() {
//getChars: 将指定索引区间的字符复制到另一个数组当中
StringBuilder builder = new StringBuilder("getChars");
char[] chars = new char[10];
//复制0-2区间的字符到char数组中
builder.getChars(0,2,chars,0);
System.out.println("builder = " + builder);
//此时打印字符为ge
System.out.println(chars);
}
setCharAt
@Test
public void setCharAt() {
//setCharAt: 替换指定索引的字符
StringBuilder builder = new StringBuilder("builder");
builder.setCharAt(6,'c');
System.out.println(builder);
}
substring
@Test
public void substring() {
//substring: 截取指定索引区间的字符
StringBuilder builder = new StringBuilder("builder");
System.out.println(builder.substring(1)); //截取掉1号索引字符
System.out.println(builder.substring(0, 4)); //截取0-4索引区间的字符
}
indexOf
@Test
public void indexOf() {
//indexOf: 返回指定字符的索引值
StringBuilder builder = new StringBuilder("builder");
System.out.println(builder.indexOf("r"));
//获取u字符,从指定索引值开始查询
System.out.println(builder.indexOf("d", 3));
}
lastIndexOf
@Test
public void lastIndexOf() {
//lastIndexOf:返回指定子字符最右边出现的字符串内的索引
StringBuilder builder = new StringBuilder("builder");
System.out.println(builder.lastIndexOf("e"));
//获取b字符从0号索引开始查询
System.out.println(builder.lastIndexOf("b", 0));
}