一:基本介绍

  • java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
  • 很多方法与String相同,但StringBuffer是可变长度的。
  • StringBuffer是一个容器。

image.png

  1. public class Test {
  2. public static void main(String[] args) {
  3. //1. StringBuffer 的直接父类 是 AbstractStringBuilder
  4. //2. StringBuffer 实现了 Serializable, 即StringBuffer的对象可以串行化
  5. //3. 在父类中 AbstractStringBuilder 有属性 char[] value,不是 final
  6. // 该 value 数组存放 字符串内容,引出存放在堆中的
  7. //4. StringBuffer 是一个 final 类,不能被继承
  8. //5. 因为 StringBuffer 字符内容是存在 char[] value, 所有在变化时
  9. // 不用每次都更换地址(即不是每次创建新对象), 所以效率高于String
  10. }
  11. }

二:String 和 StringBuffer区别

  1. String保存的是字符串常量,里面的值不能更改,每次String类的更新实防上就是更改地址
    1. 效率较低 //private final char value [ ] ;
  2. StringBuffer的更新实际上可以更新内容,不用每次更新地址

    1. 效率较高 //char [ ] value ; //这个放在堆.

      三:StringBuffer的构造器

      image.png

      1. public class Test {
      2. public static void main(String[] args) {
      3. //1.创建一个大小为16的 char[],用于存放字符内容
      4. StringBuffer stringBuffer = new StringBuffer();
      5. //2.通过构造器指定char[]大小
      6. StringBuffer stringBuffer1 = new StringBuffer(50);
      7. //3.通过给一个String 创建StringBuffer
      8. // char[]大小就是 str.length() + 16
      9. StringBuffer stringBuffer2 = new StringBuffer("sakura");
      10. }
      11. }

      四:StringBuffer 和String的相互转换

      1:String -> StringBuffer

      1. public class Test {
      2. public static void main(String[] args) {
      3. //方式一:使用构造器
      4. //注意:返回的才是StringBuffer对象,对str本身没有影响
      5. String str = "sakura";
      6. StringBuffer stringBuffer3 = new StringBuffer(str);
      7. //方式二:使用append方法
      8. StringBuffer stringBuffer = new StringBuffer();
      9. stringBuffer = stringBuffer.append(str);
      10. }
      11. }

      2:StringBuffer -> String

      1. public class Test {
      2. public static void main(String[] args) {
      3. //方式一:使用toString ( ) 方法
      4. StringBuffer stringBuffer4 = new StringBuffer("sakura");
      5. String s = stringBuffer4.toString();
      6. //方式二:使用构造器
      7. String str1 = new String(stringBuffer4);
      8. }
      9. }

      五:StringBuffer类常用方法

      1. public class Test2 {
      2. public static void main(String[] args) {
      3. StringBuffer s = new StringBuffer("sakura");
      4. //增
      5. s.append("LF");
      6. System.out.println(s);
      7. //删
      8. //删除索引为>=start && <end 处的字符
      9. s.delete(2,4);
      10. System.out.println(s);
      11. //改
      12. //使用 sakura 替换 索引 1-2 的字符 [1,2)
      13. s.replace(1,2,"sakura");
      14. System.out.println(s);
      15. //查
      16. int indexOF = s.indexOf("ra");
      17. System.out.println(indexOF);
      18. //插
      19. s.insert(0,"冷");
      20. System.out.println(s);
      21. //长度
      22. System.out.println(s.length());
      23. }
      24. }

      六:StringBuffer类测试题

      image.png ```java public class Test { public static void main(String[] args) {

      Scanner scanner = new Scanner(System.in);

      String Price = scanner.next(); //64134134.34 StringBuffer stringBuffer = new StringBuffer(Price); int b = stringBuffer.indexOf(“.”);

      if (b != -1){

      1. for (int i = b; i >=3; i-=3) {
      2. stringBuffer = stringBuffer.insert(i-3,",");
      3. }

      }else {

      1. int last = stringBuffer.length();
      2. for (int i = last; i > 3; i=i-3) {
      3. stringBuffer = stringBuffer.insert(i-3,",");
      4. }

      } System.out.println(stringBuffer);

      } }

```