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#]