1.StringBuffer类概述
String和StringBuffer都可以用来存储和操作字符串,即包含多个字符的字符串数据。String类代表不可变的Unicode字符序列,是字符串常量。String字符串一旦被初始化后,就不能再被改变其内容了(其原理在String类概述中已经讲述)。对String字符串的操作实际上对其副本(原始拷贝)的操作,原来的字符串一点都没有改变。比如:
String str = "hello"; // 创建了一个字符串
// 实际上原来的"hello"字符串对象已经丢弃了,现在又产生了一个字符串"hello世界"
str = str + "世界";
如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,从而降低了程序的效率。
StringBuffer类是抽象类AbstractStringBuilder的子类,StringBuffer类代表可变的Unicode字符序列,是字符串变量。我们打开AbstractStringBuilder类的源码:
从源码中可以看出,AbstractStringBuilder内部也是一个字符数组,但是这个字符数组没有用final修饰,那么意味着我们可以随时修改,所以我们又称StringBuffer为“可变字符序列”。 因为StringBuffer类是对原字符串本身进行操作的,对字符串进行修改操作而不产生副本拷贝,效率较高。
2.StringBuffer类构造方法
StringBuffe() | 构造一个没有字符的字符串缓冲区,初始容量为16个字符。 |
---|---|
StringBuffer(CharSequence seq) | 构造一个包含与指定的相同字符的字符串缓冲区CharSequence 。 |
StringBuffer(int capacity) | 构造一个没有字符的字符串缓冲区和指定的初始容量。 |
StringBuffer(String str) | 构造一个初始化为指定字符串内容的字符串缓冲区。 |
【示例】StringBuffer类构造方法使用
// 1.实例化一个初始容量为16个字符的可变字符串
StringBuffer sb1 = new StringBuffer();
// 2.实例化一个指定字符容量的可变字符串
StringBuffer sb2 = new StringBuffer(20);
// 3.实例化一个指定字符串内容的可变字符串
StringBuffer sb3 = new StringBuffer("hello world");
3.StringBuffer类常见方法
3.1添加方法
append(Type data)方法,把指定内容追加到可变字符串末尾,类似于字符串的连接。调用该方法以后,可变字符串的内容也发生改变。
【示例】append方法使用
// 创建一个可变字符容器,用来存放数据
StringBuilder sb = new StringBuilder("hello");
// 字符串添加
sb.append("123");
System.out.println(sb); // 输出:"hello123"
sb.append(false);
System.out.println(sb); // 输出:"hello123false"
sb.append(123);
System.out.println(sb); // 输出:"hello123false123"
insert(int offset, Type data)
方法,将内容插入到指定索引位置的可变字符串中。注意索引的取值范围是0到length()之间,超出范围抛出StringIndexOutOfBoundsException异常。调用该方法以后,可变字符串的内容也发生改变。
【示例】insert方法使用
// 创建一个可变字符容器,用来存放数据
StringBuilder sb = new StringBuilder("hello world");
// 字符串插入
ssb.insert(2, "AAA");
System.out.println(sb); // 输出:"heAAAllo world"
sb.insert(7, 123);
System.out.println(sb); // 输出:"heAAAll123o world"
sb.insert(12, true);
System.out.println(sb); // 输出:"heAAAll123o trueworld"
3.2删除方法
delete(int start, int end**)**方法,删除从start开始到end-1为止的一段字符序列。注意start的取值范围是0到length()之间,并且end应该大于等于start,否则抛出StringIndexOutOfBoundsException异常。调用该方法以后,可变字符串的内容也发生改变。
【示例】delete方法使用
// 创建一个可变字符容器,用来存放数据
StringBuilder sb = new StringBuilder("hello world");
// 字符串删除
sb.delete(2, 5);
System.out.println(sb); // 输出:"he world"
deleteCharAt(int index)
方法,删除可变字符串中指定位置的某一个字符。注意索引的取值范围是0到length() - 1之间,超出范围抛出StringIndexOutOfBoundsException异常。调用该方法以后,可变字符串的内容也发生改变。
【示例】[deleteCharAt](mk:@MSITStore:C:\Users\Administrator\Desktop\jdk api 1.8_google.CHM::/java/lang/StringBuffer.html#deleteCharAt-int-)方法使用
// 创建一个可变字符容器,用来存放数据
StringBuilder sb = new StringBuilder("hello world");
// 字符串删除
sb.deleteCharAt(2);
System.out.println(sb); // 输出:"helo world"
3.3查找方法
StringBuffer类的查找方法和String类中的方法和功能完全一致,此处就不详细概述了。
charAt(int index) | 返回 char在指定索引在这个序列值。 |
---|---|
indexOf(String str) | 返回指定子字符串第一次出现的字符串内的索引。 |
indexOf(Stringstr, int fromIndex) | 返回指定子串的第一次出现的字符串中的索引,从指定的索引开始。 |
lastIndexOf(String str) | 返回指定子字符串最右边出现的字符串内的索引。 |
lastIndexO(String str, int fromIndex) | 返回指定子字符串最后一次出现的字符串中的索引,从指定的索引开始。 |
3.4修改方法
replace(int start, int end, String str)
方法,用字符串str替换从start开始到end-1截止的字符。注意start的取值范围是0到length()之间,并且end应该大于等于start,否则抛出StringIndexOutOfBoundsException异常。调用该方法以后,可变字符串的内容也发生改变。
【示例】replace方法使用
// 创建一个可变字符容器,用来存放数据
StringBuilder sb = new StringBuilder("hello world");
// 字符串替换
sb.replace(5, 6, "我替换了空格");
System.out.println(sb); // 输出:"hello我替换了空格world"
setCharAt(int index, char ch)
方法,替换可变字符串中指定索引位置的字符。注意索引的取值范围是0到length() - 1之间,超出范围抛出StringIndexOutOfBoundsException异常。调用该方法以后,可变字符串的内容也发生改变。
【示例】setCharAt方法使用
// 创建一个可变字符容器,用来存放数据
StringBuilder sb = new StringBuilder("hello-world");
// 字符串替换
sb.setCharAt(5, '_');
System.out.println(sb); // 输出:"hello_world"
3.5 reverse方法
reverse()方法,用于将字符序列逆序。调用该方法以后,可变字符串的内容也发生改变。
【示例】reverse方法使用
// 创建一个可变字符容器,用来存放数据
StringBuilder sb = new StringBuilder("hello world");
// 将字符序列逆序,可变字符串中的内容随之也发生改变
sb.reverse();
System.out.println(sb); // 输出:"dlrow olleh"
3.6 setLength方法
setLength(int newLength)方法,用于设置字符序列的长度。注意newLength的取值必须大于或等于0,否则抛出IndexOutOfBoundsException异常。
【示例】setLength方法使用
// 创建一个可变字符容器,用来存放数据
StringBuilder sb = new StringBuilder("hello-world");
// 设置字符串长度
sb.setLength(3);
// 输出:内容:"hel" length:3
System.out.println("内容:" + sb + " length:" + sb.length());
3.7 其他常见方法
StringBuffer类的其他常见方法,这些方法和类中的方法和功能完全一致。
length() | 返回长度(字符数)。 |
---|---|
substring(int start) | 返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。 |
substring(int start, int end) | 返回一个新的 String ,其中包含此序列中当前包含的字符的子序列。 |
ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。
来源:CSDN
作者:武汉尚学堂
链接:https://blog.csdn.net/zhoujunfeng121/article/details/104784180