StringBuffer、StringBuilder、StringJoiner
String/StringBuffer/StringBuilder的区别
- String:不可变的字符序列
- StringBuffer:可变的字符序列,线程安全,效率低
- StringBuilder:可变的字符序列,线程不安全,效率高
它们的共同点是底层都是用char[]存储的。
StringBuilder常用方法
StringBuffer与StringBuilder用法几乎完全一致,区别就在于一个线程安全、一个线程不安全。
有些时候需要将许多小串的字符一起拼接成一个大的字符,如果用字符串拼接的方式的话,既耗时又浪费空间。这个时候,可以采用StringBuilder类。
public class Sty {
public static void main (String [] args) {
char c1 = 'j';
char c2 = 'a';
char c3 = 'v';
String s1 = " is ";
String s2 = "a good ";
String s3 = "language";
StringBuilder strBld = new StringBuilder();
strBld.append(c1).append(c2).append(c3).append(c2);
strBld.append(s1).append(s2).append(s3);
String str = strBld.toString();
System.out.println(str); // java is a good language
}
}
StringBuilder还有一些其他常用方法,如:
- length
- insert
- delete
- reverse
- replace
- indexOf
- substring
- ……
StringJoiner
经常会用分割符来连接多个字符串,这种情况下使用StringJoiner就比StringBuilder方便一些。
该类构造函数有三个参数,后两个是可选的。第一个参数表示连接符,第二个参数是字符串开始符,第三个参数是字符串结尾符。
StringJoiner join = new StringJoiner(",");
join.add("php").add("java").add("c++").add("c#");
System.out.println(join); // php,java,c++,c#
现在,我希望在字符串开始插入"[",结尾处插入"]";
StringJoiner join = new StringJoiner(",", "[", "]");
join.add("php").add("java").add("c++").add("c#");
System.out.println(join); // [php,java,c++,c#]