zoukankan      html  css  js  c++  java
  • 【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(): 返回长度(字符数)。 实际值

    • 案例演示

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

      • 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):

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

      • 代码示例
        • 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):

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

    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的替换和反转功能

    • StringBuffer的替换功能

      • public StringBuffer replace(int start,int end,String str):

        • 从start开始到end用str替换

    • StringBuffer的反转功能

      • public StringBuffer reverse():

        • 字符串反转

    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的截取功能及注意事项

    • StringBuffer的截取功能

      • public String substring(int start):

        • 从指定位置截取到末尾

      • public String substring(int start,int end):

        • 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置

    • 注意事项

      • 注意:返回值类型不再是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的相互转换

    • String -- StringBuffer

      • 通过构造方法

      • 通过append()方法

    • StringBuffer -- String

      • 通过构造方法

      • 通过toString()方法

      • 通过subString(0,length);

    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. 把数组转成字符串

    • 案例演示

      • 需求:把数组中的数据按照指定个格式拼接成一个字符串

      • 举例: int[] arr = {1,2,3}; 输出结果: "[1, 2, 3]"

        • package com.heima.test;
          
          public class Test1 {
          
              /**
               需求:把数组中的数据按照指定个格式拼接成一个字符串
          
              举例: int[] arr = {1,2,3}; 输出结果: "[1, 2, 3]"
               */
              public static void main(String[] args) {
                  int[] arr = {1,2,3};
                  System.out.println(array2String(arr));
                  
              }
              
              public static String array2String(int[] arr) {
                  StringBuffer sb = new StringBuffer();
                  sb.append("[");
                  for(int i = 0; i < arr.length; i++) {
                      if(i == arr.length -1) {
                          sb.append(arr[i]).append("]");
                      } else {
                          sb.append(arr[i] + ",");
                      }
                  }
              
                  return sb.toString();
              }
          
          }
          用StringBuffer实现

     

    9. 字符串反转

    • 案例演示

    • 需求:把字符串反转

    • 举例:键盘录入"abc" 输出结果:"cba"

    • package com.heima.test;
      
      import java.util.Scanner;
      
      public class Test2 {
      
          /**
          需求:把字符串反转
          
          举例:键盘录入"abc" 输出结果:"cba"
           */
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              String line = sc.nextLine();
              
              StringBuffer sb = new StringBuffer(line);
              sb.reverse();
              System.out.println(sb);
          }
          
          
      }
      View Code

     

    10. StringBuffer和StringBuilder的区别

    • StringBuilder的概述

      • 一个可变的字符序列。

      • 此类提供一个与StringBuffer兼容的API,但不保证同步。

      • 该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)
      • 如果可能,建议优先使用该类,因为在大多数实现中,它比StringBuffer要快。
    • 面试题

      • String,StringBuffer,StringBuilder的区别

        • String是一个不可变的字符序列
        • StringBuffer,StringBuilder是可变的字符序列
        • StringBuffer,StringBuilder的区别

          • StringBuffer是jdk1.0版本的,是线程安全的(同步的),效率低

          • StringBuilder是jdk1.5版本的,是线程不安全的(不同步的),效率高

     

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

    • 形式参数问题

      • String作为参数传递

      • StringBuffer作为参数传递

    • 案例演示

      • String和StringBuffer分别作为参数传递问题

      • package com.heima.stringbuffer;
        
        public class Demo7_StringBuffer {
        
            /**
            形式参数问题:
                String作为参数传递
                StringBuffer作为参数传递
            基本数据类型的值传递,不改变其值;
            引用数据类型的值传递,改变其值。
             */
            public static void main(String[] args) {
                String s = "heima";
                System.out.println(s); // 输出heima
                change(s);
                System.out.println(s); // 输出heima
                
                StringBuffer sb = new StringBuffer();
                sb.append("heima");
                System.out.println(sb); // 输出heima
                change(sb);
                System.out.println(sb); // 输出heimaitcast
            }
        
            public static void change(String s) {
                s += "itcast";
            }
            
            public static void change(StringBuffer sb) {
                sb.append("itcast");
            }
        
        }
        View Code

     

  • 相关阅读:
    numpy 基础 —— np.linalg
    图像旋转后显示不完全
    opencv ---getRotationMatrix2D函数
    PS1--cannot be loaded because the execution of scripts is disabled on this system
    打开jnlp Faild to validate certificate, the application will not be executed.
    BATCH(BAT批处理命令语法)
    oracle vm virtualbox 如何让虚拟机可以上网
    merge 实现
    Windows batch,echo到文件不成功,只打印出ECHO is on.
    python2.7.6 , setuptools pip install, 报错:UnicodeDecodeError:'ascii' codec can't decode byte
  • 原文地址:https://www.cnblogs.com/zoe233/p/12840911.html
Copyright © 2011-2022 走看看