Java StringBuffer

知识背景: Java 中规定,一旦声明String的内容就不可再改变。如果要改变,改变肯定是String的引用地址。 如果一个字符串需要经常被改变,使用StringBuilder或 StringBuffer,将其声明为可变字符串。

一、StringBuffer

StringBuffer 可变字符串,线程安全(所有方法返回值前面有synchronized关键字修饰,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码),可用于多线程编程,效率比StringBuilder略低。

特点:
1、StringBuffer 是一个字符串缓冲区
2、长度是可以变化的
3、可以操作多个数据类型
4、最终会通过toString()方法变成字符串。

二、StringBuffer 常用 方法

1、构造方法初始化可变字符串

StringBuffer string = new StringBuffer("Java");
System.out.println("使用带参构造方法初始化一个可变字符串:"+string);

// 使用带参构造方法初始化一个可变字符串:Java

2、往字符串末尾拼接内容(注意: 这里的内容 和前面讲的StringBuilder一样)

string.append(" is good");
System.out.println("拼接后字符串内容为:"+string);

//拼接后字符串内容为:Java is good

总结 : insert可以拼接任何的数据类型,insert可以插入任何类型数据

3、查找指定字符串是否存在,存在,返回第一次出现的下标,不存在,返回-1

int index = string.indexOf("is");
System.out.println("字符串是否存在is子字符串:"+index);

// 字符串是否存在is子字符串:5

4、指定位置插入内容

string.insert(string.length(), "!");
System.out.println("指定位置插入内容:"+string);

//指定位置插入内容:Java is good!

5、指定范围替换 [start,end)

string.replace(0, 5, "Objective-C ");
System.out.println("替换后的字符串:"+string);
//stringbuffer.setCharAt(0, 'A'); //指定位置替换字符,返回StringBuffer
// 替换后的字符串:Objective-C is good!

6、指定 范围删除 [strat ,end)

string.delete(0, 10);
System.out.println("指定范围删除:"+string);
//string.deleteCharAt(1); //删除第一个字符   is good!
//指定范围删除:C is good!

7、指定位置截取,到结束 [start ..]

String substring =  string.substring(2);
System.out.println("原字符串:"+string);
System.out.println("指定位置截取后字符:"+substring);

// 原字符串:C is good!
//指定位置截取后字符:is good!

8、指定范围截取[start end)

String rangeString = string.substring(3, 7);
System.out.println("原字符串:"+string);
System.out.println("指定范围截取:"+rangeString);

// 原字符串:C is good!
// 指定范围截取:s go

9、字符串反转

string.reverse();
System.out.println("反转后字符串:"+string);

//反转后字符串:!doog si C

10、转化成String 类型

String toString = string.toString();
System.out.println("转化成String:"+toString);

// 化成String:!doog si C

注意: 关于可变字符串 StringBuffer 和 StringBuilder (jdk1.5后) 都可以通过toString()方法生成一个不可变字符串。StringBuffer 是线程安全的,StringBuilder并不保证线程同步。所以,性能上 StringBuilder的效率略高于StringBuffer(建议使用StringBuilder)。但是你也需要研发人员区分使用场景。

单线程: StringBuilder
多线程 :StringBuffer

即可。

你可能感兴趣的:(Java,成长之路)