【JAVA基础】13 StringBuffer类

1. StringBuffer类的概述

  • StringBuffer类概述

    • 线程安全的可变字符序列。

    • 类似String的字符串缓冲区,但不能修改。
    • 在任意时间点上都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

  • StringBuffer和String的区别

    • String是一个不可变的字符序列

      • StringBuffer是一个可变的字符序列

        • StringBuffer不能像String用“+”与任意类型数据进行拼接
        • 但有append,insert,delete等方法改变序列的长度和内容

 

2. StringBuffer类的构造方法

  • StringBuffer的构造方法:

    • public StringBuffer():  无参构造方法

    • public StringBuffer(int capacity):  指定容量的字符串缓冲区对象

    • public StringBuffer(String str):  指定字符串内容的字符串缓冲区对象

  • StringBuffer的方法:

    • public int capacity():返回当前容量。 理论值(不掌握)

    • public int length(): 返回长度(字符数)。 实际值

  • 案例演示

    • 构造方法和长度方法的使用

    • 【JAVA基础】13 StringBuffer类
      package com.heima.stringbuffer;
      
      public class Demo1_StringBuffer {
      
          /**
          StringBuffer() 
                    构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。 
          StringBuffer(CharSequence seq) 
                public java.lang.StringBuilder(CharSequence seq) 构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。 
          StringBuffer(int capacity) 
                    构造一个不带字符,但具有指定初始容量的字符串缓冲区。 
          StringBuffer(String str) 
                    构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。 
      
           */
          public static void main(String[] args) {
              StringBuffer sb = new StringBuffer();
              System.out.println(sb.length());  // 输出0
              System.out.println(sb.capacity()); // 输出16
              
              StringBuffer sb2 = new StringBuffer(10);
              System.out.println(sb2.length());  // 输出0
              System.out.println(sb2.capacity()); // 输出10
              
              StringBuffer sb3 = new StringBuffer("heima");
              System.out.println(sb3.length());  // 输出5
              System.out.println(sb3.capacity()); // 输出21,字符串的length() + 初始容量16
              
          }
      
      }
      View Code

3. StringBuffer的添加功能

  • StringBuffer的添加功能

    • public StringBuffer append(String str):

      • 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身

      • append是一个重载的方法,可以添加多种数据类型,如:
        • boolean b
        • char c
        • char[] str
        • char[] str,int offset,int len
        • CharSequence s
        • CharSequence s,int start, int end
        • double d
        • float f
        • int i
        • long lng
        • Object obj
        • String str
        • StringBuffer sb
      • StringBuffer是字符串缓冲区,当new的时候是在堆内存创建了一个对象,底层是一个长度为16的字符数组。
      • 当调用添加的方法时,不会再重新创建对象,在不断向原缓冲区添加字符
    • public StringBuffer insert(int offset,String str):

      • 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

    • 代码示例
      • 【JAVA基础】13 StringBuffer类
        package com.heima.stringbuffer;
        
        public class Demo2_StringBuffer {
        
            /**
            StringBuffer的添加功能
        
                public StringBuffer append(String str):
                
                    可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
                
                public StringBuffer insert(int offset,String str):
                
                    在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
             */
            public static void main(String[] args) {
                method1_append();
                
                method2_insert();
            
                
            }
        
            public static void method2_insert() {
                StringBuffer sb = new StringBuffer("01234");
                sb.insert(3, "heima"); // 在指定位置添加元素,如果没有指定位置的索引就会报索引越界异常
                System.out.println(sb);
            }
        
            public static void method1_append() {
                StringBuffer sb = new StringBuffer();
                StringBuffer sb2 = sb.append(true);
                StringBuffer sb3 = sb.append("heima");
                StringBuffer sb4 = sb.append(100);
                
                System.out.println(sb.toString());  // StringBuffer类中重写了toString方法,显示的是对象的属性值
                System.out.println(sb2.toString());
                System.out.println(sb3.toString());
                System.out.println(sb4.toString());
            }
        
        }
        View Code

4. StringBuffer的删除功能

  • StringBuffer的删除功能

    • public StringBuffer deleteCharAt(int index):

      • 删除指定位置的字符,并返回本身

    • public StringBuffer delete(int start,int end):

      • 删除从指定位置开始指定位置结束的内容,并返回本身

【JAVA基础】13 StringBuffer类
package com.heima.stringbuffer;

public class Demo3_StringBuffer {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        //sb.deleteCharAt(5);  // 当缓冲区中这个索引上没有元素的时候,就会报索引越界异常
        sb.append("heima");
        sb.deleteCharAt(3);  // 根据索引位置删除对应的字符
        System.out.println(sb);
        
        sb.delete(0,2);
        System.out.println(sb); // 删除索引0,1上的对应的值
        
        sb.delete(0,sb.length()); // 清空缓冲区
        
        sb = new StringBuffer();  // 不要用这种方式清空缓冲区,原来的会变成垃圾,浪费内存
        System.out.println(sb);
    }
}
View Code

5. StringBuffer的替换和反转功能

【JAVA基础】13 StringBuffer类
package com.heima.stringbuffer;

public class Demo4_StringBuffer {

    /**
     StringBuffer的替换功能

        public StringBuffer replace(int start,int end,String str):
    
        从start开始到end用str替换
    
    StringBuffer的反转功能
    
        public StringBuffer reverse():


     */
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("heima");
        sb.replace(0, 2, "ba");
        System.out.println(sb);
        
        sb.reverse();
        System.out.println(sb);
        
    }

}
View Code

6. StringBuffer的截取功能及注意事项

【JAVA基础】13 StringBuffer类
package com.heima.stringbuffer;

public class Demo5_StringBuffer {

    /**
    StringBuffer的截取功能

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

    注意事项

        注意:返回值类型不再是StringBuffer本身
     */
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("我爱家人");
        String sub = sb.substring(2);
        System.out.println(sub);
        System.out.println(sb);
        
        String sub2 = sb.substring(1,2);
        System.out.println(sub2);
    }

}
View Code

7. StringBuffer和String的相互转换

【JAVA基础】13 StringBuffer类
package com.heima.stringbuffer;

public class Demo6_StringBuffer {

    /**
     String -- StringBuffer

        通过构造方法
        
        通过append()方法
        
    StringBuffer -- String
        
        通过构造方法
        
        通过toString()方法
        
        通过subString(0,length);

     */
    public static void main(String[] args) {
        stringToStringBuffer();
        stringBufferToString();
    }

    public static void stringBufferToString() {
        StringBuffer sb = new StringBuffer("heima");
        String s1 = new String(sb);
        System.out.println(s1);
        
        String s2 = sb.toString();
        System.out.println(s2);
        
        String s3 = sb.substring(0, sb.length());
        System.out.println(s3);
    }

    public static void stringToStringBuffer() {
        // 通过构造方法,将字符串转换为StringBuffer对象
        StringBuffer sb = new StringBuffer("heima");
                
        // 通过append方法,将字符串转换为StringBuffer对象
        StringBuffer sb2 = new StringBuffer();
        sb2.append("heima");
        System.out.println(sb2);
        
    }

}
View Code

8. 把数组转成字符串

 

9. 字符串反转

 

10. StringBuffer和StringBuilder的区别

 

11. String和StringBuffer分别作为参数传递

 

相关推荐