StringBuffer类和StringBuilder类以及StringJoiner类

目      StringBuffer类和StringBuilder类以及StringJoiner类_第1张图片      录

一.StringBuffer类​

​1.StringBuffer

​2.StringBuffer的构造方法

​3.StringBuffer的取容量和长度的方法:

​4.StringBuffer添加功能方法:

​5. StringBuffer删除功能的方法

 ​6.StringBuffer替换和反转功能的方法

​7.StringBuffer截取功能的方法

二.StringBuilder类

三.StringJoiner类​

四.String类,StringBuffer类和StringBuilder类的区别​


一.StringBuffer类

1.StringBuffer

 我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间.StringBuffer就可以解决这个问题.

StringBuffer是一个字符容器,是线程安全的可变字符序列.

2.StringBuffer的构造方法

  • public StringBuffer():                             无参构造方法
  • public StringBuffer(int capacity):         指定容量的字符串缓冲区对象
  • public StringBuffer(String str):             指定字符串内容的字符串缓冲区对象
public class Test {
    public static void main(String[] args) {

        // StringBuffer:长度可变的字符容器。

       /* StringBuffer()  构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。*/
        StringBuffer sb = new StringBuffer();

        //你可以指定容器容量,例如指定100
        StringBuffer stringBuffer = new StringBuffer(100);

        //指定字符串内容的字符串缓冲区对象
        StringBuffer sb2 = new StringBuffer("abc");
       
    }
}

3.StringBuffer的取容量和长度的方法:

  • public int capacity():            返回当前容量。    理论值
  • public int length():                  返回长度(字符数)。 实际值
public class Test {
    public static void main(String[] args) {
      
        StringBuffer sb = new StringBuffer();
        StringBuffer stringBuffer = new StringBuffer(100);
        StringBuffer sb2 = new StringBuffer("abc");
        
            //获取容量的方法
            int capacity1 = sb.capacity();
            System.out.println(capacity1);             //16
            int capacity2 = stringBuffer.capacity();
            System.out.println(capacity2);             //100
            int capacity3 = sb2.capacity();
            System.out.println(capacity3);             //19=16+3    16:默认容量  3:abc字符串的长度

            //获取字符容器的长度
            int length1 = sb.length();
            System.out.println(length1);               //0
            int length2 = stringBuffer.length();
            System.out.println(length2);               //0
            int length3 = sb2.length();
            System.out.println(length3);               //3

    }
}

如何区分容量和长度?

按照生活中的实例水杯来说:一个水杯的额定容量是500ML ,实际装水 100ML.那么容量就是500ML,长度为100ML.也就是,容量为总的容量,而长度就是实际装的容量.

注意:有参构造方法的容量为16(默认容量)+字符串的长度.(StringBuffer的容量如果超过16,会自动扩展.)

4.StringBuffer添加功能方法:

  • public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
  • public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
public class Test {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("秃头小编");
        //往容器中追加内容,返回的还是原来的容器本身。
        //append()
        StringBuffer sb2 = sb.append("不想再秃头");
        //sb 和 sb2 是同一个容器对象吗?是
        System.out.println(sb == sb2);          //true

        StringBuffer sb3 = new StringBuffer();
        sb3.append("我").append("爱").append("你").append(10000).append("年").append(true);
        //StringBuffer 重写了toString方法,把容器中的数据,转换成字符串返回
        String str = sb3.toString();
        System.out.println(str);                //我爱你10000年true

        //insert()
        StringBuffer sb4 = new StringBuffer();
        sb4.append("aaa");
        sb4.append("ccc");
        sb4.append("ddd");
        System.out.println(sb4);                //aaacccddd
        //可以往指定索引处,追加内容,返回的还是原来的容器
        sb4.insert(2, "eee");
        System.out.println(sb4);                //aaeeeacccddd
    }
}

5. StringBuffer删除功能的方法

  • public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
  • public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
public class Test {
    public static void main(String[] args) {

        StringBuffer sb = new StringBuffer().append("删除指定位置的字符,并返回本身");
        //字符容器中的字符,也是编有索引的 ,从0开始
        //根据索引删除容器中的某个字符,返回的还是原来的容器
        sb.deleteCharAt(0);
        System.out.println(sb);          //除指定位置的字符,并返回本身

        //从起始索引到终止索引,来删除容器中一段内容,返回的还是容器本身,含头不含尾
        sb.delete(0, 3);
        System.out.println(sb);          //位置的字符,并返回本身

    }
}

 6.StringBuffer替换和反转功能的方法

  • public StringBuffer replace(int start,int end,String str):从start开始到end用str替换
  • public StringBuffer reverse():字符串反转
public class Test {
    public static void main(String[] args) {

        StringBuffer sb = new StringBuffer().append("从start开始到end用str替换");

        //根据起始索引和终止索引,替换容器中一步分内容,返回的还是容器本身
        sb.replace(0, sb.indexOf("到") + 1, "呵呵");
        System.out.println(sb);           //呵呵end用str替换

        //StringBuffer的反转功能
        sb.reverse();
        System.out.println(sb);           //换替rts用dne呵呵

    }
}

7.StringBuffer截取功能的方法

  • public String substring(int start):从指定位置截取到末尾
  • public String substring(int start,int end):截取从指定位置开始到结束位置,包括开始位置,不包括结束位置

注意:返回值类型不再是StringBuffer本身

public class Test {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer().append("StringBuffer的截取功能");

        //根据起始索引和终止索引,从容器中截取一部分内容返回,注意返回的是字符串
        String s = sb.substring(0, sb.indexOf("的"));     //含头不含尾
        //返回的不再是容器本身
        System.out.println(s);              //StringBuffer
        System.out.println(sb);             //StringBuffer的截取功能
    }
}

二.StringBuilder类

首先StringBuilder中的方法与StringBuffer中的方法完全一样.

其区别在于:StringBuilder是线程不安全的可变字符序列.执行效率要比StringBuffer高一些.

StringBuilder类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer要快。

三.StringJoiner类

  • StringJoiner(CharSequence delimiter) : 构建了一个字符容器,指定分隔符 
  • StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) : 构建了一个字符容器,指定分隔符,前缀,后缀
  • StringJoiner add(CharSequence newElement) : 增加了一份给 CharSequence值的 StringJoiner价值的下一个元素。也就是拼接,这个方法只能拼接字符串.
  • int length() : 返回该 StringJoiner的 String表示长度。 
  • String toString(): 把容器中的数据以字符串返回
import java.util.StringJoiner;

public class Test {
    public static void main(String[] args) {
      
        //构建了一个字符容器,指定分隔符 
        StringJoiner sj=new StringJoiner(",");
        //add只能拼接字符串
        sj.add("1111").add("2222").add("3333");
        System.out.println(sj);         //1111,2222,3333

        //构建了一个字符容器,指定分隔符,前缀,后缀
        StringJoiner sj2=new StringJoiner(",","[","]");
        sj2.add("aaa").add("bbb").add("ccc");
        System.out.println(sj2);        //[aaa,bbb,ccc]

        //返回该 StringJoiner的 String表示长度
        int a=sj.length();
        System.out.println(a);          //14

        //StringJoiner中的toString方法重写了,调用重写之后的toString方法,把容器中的数据以字符串返回
        System.out.println(sj2.toString());       //[aaa,bbb,ccc]

    }
}

四.String类,StringBuffer类和StringBuilder类的区别

  • String字符串长度不可变,StringBuffer和StringBuilder的字符串长度是可变的!
  • String内存地址指向更改,StringBuffer,StringBuilder可在原来的地址上继续拼接(String拼接字符串并不是在原来的对象上拼接的!而是生成了新的拼接后的对象!然后内存地址指向更改!而StringBuffer和StringBuilder的字符串拼接后还是在原来的容器里!)
  • String相对于其他两个,它的执行效率最低,StringBuffer比StringBuilder的执行效率低一些,StringBuilder的执行效率最高!
  • StringBuilder与StringBuffer的方法完全相同,其唯一的不同点就是StringBuffer线程安全,而StringBuilder线程非安全.

StringBuffer类和StringBuilder类以及StringJoiner类_第2张图片

(小编也在努力学习更多哟!以后会多多分享哒!)

希望对友友们有所帮助!!!! 

你可能感兴趣的:(JAVASE基础知识,java,StringBuffer,StringBuilder,StringJoiner)