我们已经了解了 String 类 的基本概念,我们知道 String 定义的内容一旦声明就不能够改变了,如果改变的话,就是改变了 String 引用的地址。
如果在使用过程中一个字符串要经常改变,但是不想改变引用地址,我们就可以使用 StringBuffer 类。
StringBuffer 变量名称 = new StringBuffer(""); //构造方法赋值,构造方法可以为空,也可以传递字符,也可以传递数字
参数 | 描述 |
---|---|
StringBuffer | StringBuffer关键字 |
new StringBuffer("") | 构造方法里面可以传递数字,表示字符长度,可以为空,可以为字符串 |
StringBuffer 对应的对象是 StringBuffer,不是 String,它可以随便改变字符串数据。
序号 | 方法名称 | 描述 |
---|---|---|
1 | public StringBuffer() | 无参构造方法 |
2 | public StringBuffer append(char c); | StringBuffer 追加字符 |
3 | public StringBuffer append(String str); | StringBuffer 追加字符串 |
4 | public StringBuffer append(StringBuffer sb); | StringBuffer 追加StringBuffer对象 |
5 | public int indexOf(String str); | 查看指定字符串在StringBuffer里面的位置,返回 -1 表示不存在 |
6 | public int indexOf(String string fromIndex); | 从 StringBuffer 指定位置查看指定字符串在StringBuffer里面的位置,返回 -1 表示不存在 |
7 | public StringBuffer insert(int offset,String str) | 在指定位置处加上指定字符串 |
8 | public StringBuffer reverse() | 将内容反转保存 |
9 | public StringBuffer replace(int starting end,String str) | 指定内容体会 |
10 | public int length() | 求出内容长度 |
11 | public StringBuffer delete(int start,int end) | 删除指定范围大字符串 |
12 | public StringBuffer substring(int start) | 字符串从指定开始位置截取 |
13 | public StringBuffer substring(int start,int end) | 截取指定范围的字符串 |
14 | public String toString() | 将内容转换为 String 类型 |
package com.haicoder.net.stringbuffer;
public class StringBufferTest {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)");
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("嗨客网"); //追加信息
stringBuffer.append("(www.haicoder.net)"); //追加信息
System.out.println("stringBuffer 结果为 :" + stringBuffer.toString());
StringBuffer stringBuffer1 = new StringBuffer("嗨客网");
System.out.println("stringBuffer1 结果为 :" + stringBuffer1.toString());
stringBuffer.insert(0, "欢迎来到"); //在 0 位开始添加数据
System.out.println("在 0 位置处添加信息,结果为 :" + stringBuffer.toString());
System.out.println("字符反转 : " + stringBuffer1.reverse()); //字符反转
System.out.println("替换内容 : " + stringBuffer.replace(4,6,"面条小子").toString()); //替换指定位置内容
System.out.println("删除指定位置内容:" + stringBuffer.delete(4,9).toString()); //删除指定内容
System.out.println("确认指定内容(嗨客网)是否存在:" + stringBuffer.indexOf("嗨客网")); //由于上面删除掉来,所以查询不到,返回 -1
System.out.println("确认指定内容(来到)是否存在:" + stringBuffer.indexOf("来到")); //返回字符串第一个开始位置
}
}
运行结果如下:
由于 StringBuffer 定义的对象是引用类型的,所以我们每次操作的结果对下次操作都生效。例子里面我们将常用的方法调用了一下,和描述的结果一样。
StringBuffer 里面的操作都是由 synchronized 修饰的,是 线程 安全的,与之对应的是 StringBuilder,它的速度比 StringBuffer 快,但是它不是线程安全的。在具体使用场景中,读者可以根据自己的要求来选定具体类。