Java教程

java--常用类--StingBuffer类和StringBuilder类

本文主要是介绍java--常用类--StingBuffer类和StringBuilder类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  1. StringBuffer类
    1. package com.model.stringbuffer;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/4 18:23
       * 演示StringBuffer类的使用
       */
      public class StringBufferDemo01 {
          public static void main(String[] args) {
              /**
               *char[] value;\
               * //1. StringBuffer的直接父类是 AbstractStringBuilder
               * //2.StringBuffer实现了Serializable,即StringBuffer的对象可以串行化
               * //3.在父类中 AbstractStringBuilder有属性char[] value,不是final
               * // 该value 数组存放字符串内容,引出存放在堆中的
               * //4. StringBuffer是一个 final类,不能被继承
               * //5.因为StringBuffer字符内容是存在 char[] value,所有在变化(增加/删除)
               * // 不用每次都更换地址(即创建新对象),所以他的效率是高于String的
               * */
              StringBuffer buffer=new StringBuffer();
           }
      }
    2.   

    3.  

      package com.model.stringbuffer;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/4 18:23
       * 演示StringBuffer类的使用
       */
      public class StringBufferDemo01 {
          public static void main(String[] args) {
              /**
               *char[] value;\
               * //1. StringBuffer的直接父类是 AbstractStringBuilder
               * //2.StringBuffer实现了Serializable,即StringBuffer的对象可以串行化
               * //3.在父类中 AbstractStringBuilder有属性char[] value,不是final
               * // 该value 数组存放字符串内容,引出存放在堆中的
               * //4. StringBuffer是一个 final类,不能被继承
               * //5.因为StringBuffer字符内容是存在 char[] value,所有在变化(增加/删除)
               * // 不用每次都更换地址(即创建新对象),所以他的效率是高于String的
               * */
              /*
              * String 和StringBuffer的相互转换
              * */
              //String 转为StringBuffer
              //第一种使用StringBuffer的构造器
              String str="abc";
              StringBuffer buffer=new StringBuffer(str);
              //第二种,使用StringBuffer的append()方法
              String str1="abc";
              StringBuffer buffer1 = new StringBuffer();
              buffer1.append(str1);
      
              //StringBuffer转为String类型
              //第一种使用StingBuffer的toString()方法
              StringBuffer buffer2 = new StringBuffer("abc");
              String s = buffer2.toString();
              System.out.println(s);
              //第二种使用new String(),String的构造器
              StringBuffer buffer3 = new StringBuffer("abc");
              String s1 = new String(buffer3);
              System.out.println(s1);
      
      
          }
      }
    4.  

       

       

    5. package com.model.stringbuffer;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/4 18:55
       * 演示StringBuffer类的常用方法
       */
      public class StringBufferDemo02 {
          public static void main(String[] args) {
              StringBuffer buffer = new StringBuffer();
      //        1.添加
              buffer.append("0123456789");
              //  public synchronized String toString() {
              //        if (toStringCache == null) {
              //            toStringCache = Arrays.copyOfRange(value, 0, count);
              //        }
              //        return new String(toStringCache, true);  //直接将拼接的字符数组转为字符串 new String();
              //    }
              System.out.println(buffer.toString());
      
      //        2.删除
              buffer.delete(0, 4);//删除下标为0到4的字符不包含4  [0,4)
              System.out.println(buffer);
      //        3.修改
              buffer.replace(0, 2, "张紫韩"); //0到2的字符替换为张紫韩不包含小标为2的字符 [0,2)
              System.out.println(buffer);
      //        4.查找
              int index = buffer.indexOf("9"); //查找字符串中第一次出现 9 的位置,没有则返回-1
              System.out.println(index);
      //        5.插入
              buffer.insert(0, "zzh"); //在索引为0的位置插入zzh其他的依次向后移动
              System.out.println(buffer);
      //        6.长度
              System.out.println(buffer.length());
      
      
          }
      }

       

    6.  

       

       

       

    7. package com.model.stringbuffer;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/4 19:12
       * 演示StringBuffer类的练习题
       */
      public class StringBufferDemo03 {
          public static void main(String[] args) {
              /**
               * public AbstractStringBuilder append(String str) {
               if (str == null) //如果append为null
               return appendNull(); //就使用一个appendNull()方法
               int len = str.length();
               ensureCapacityInternal(count + len);
               str.getChars(0, len, value, count);
               count += len;
               return this;
               }
      
      appendNull():将null分解为 ’n‘  ’ u‘ ’l‘  ’l‘ 四个字符加入到底层的字符数组中
               private AbstractStringBuilder appendNull() {
               int c = count;
               ensureCapacityInternal(c + 4);
               final char[] value = this.value;
               value[c++] = 'n';
               value[c++] = 'u';
               value[c++] = 'l';
               value[c++] = 'l';
               count = c;
               return this;
               }
               * */
              String str=null;
              StringBuffer buffer = new StringBuffer();
              buffer.append(str); //null会加入到底层的字符数组中
              System.out.println(buffer);
              System.out.println(buffer.length());
              /**
               *     public StringBuffer(String str) {
               *         super(str.length() + 16); //null.length() 抛出空指针异常
               *         append(str);
               *     }*/
              StringBuffer buffer1 = new StringBuffer(str);//会抛出空指针异常
      
      
          }
      }
    8.  

    9. package com.model.stringbuffer;
      
      import java.util.Scanner;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/4 19:25
       * 演示StringBuffer类的练习题
       */
      public class StringBufferDemo04 {
          public static void main(String[] args) {
              Scanner scanner = new Scanner(System.in);
              Double price = scanner.nextDouble();
              StringBuffer buffer = new StringBuffer(String.valueOf(price));
              int index = buffer.indexOf(".");
              index-=3;
              while(index>0){
                  buffer.insert(index, ",");
                  index-=3;
              }
              System.out.println(buffer);
          }
      }

       

  2. StringBuilder类:
    1. package com.model.stingbuilder;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/4 19:41
       * 演示StringBuilder类的使用
       */
      public class StringBuilderDemo01 {
          public static void main(String[] args) {
      //        StringBuilder 线程不安全
      //        StringBuffer:线程安全的
              /*
              *1.继承了 AbstractStringBuilder类
              * 2.实现了Serializable,说明StringBuilder对象可以实现串行化(可以进行网络传输,可以保存到文件中
              * 3.是一个final类说明不可以进行继承
              * 4.StringBuilder的数据仍然是存放在父类的 char[] value字符数组中
              * 5.没有堆synchronized关键字,线程不安全
              * */
              StringBuilder stringBuilder = new StringBuilder();
      
          }
      }
  3. Sting、StringBuffer、StringBuilder的对比

    1.  

这篇关于java--常用类--StingBuffer类和StringBuilder类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!