3、StringBuffer类

StringBuffer类

  1. java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删

    很多方法与String相同,但StringBuffer是可变长度的 StringBuffer是一个容器

    • StringBuffer 的直接父类是 AbstractStringBuilder

    • StringBuffer 实现了 Serializable,即StringBuffer的对象可以串行化

    • 在父类 AbstractStringBuilder 有属性 char[] value ,不是final
      该 value 数组存放 字符串内容,因此存放在堆中的

    • StringBuffer 是一个 final 类,不能被继承

    • 因为StringBuffer 字符内容是存在 char[] value,所以再变化(增加/删除)时,不用每次

      都更换地址(即不是每次创建对象),所以效率高于 String

  2. String VS StringBuffer

    • String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,

      效率极低 //private final char value[];

    • StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以

      更新内容,不用每次更新地址,效率极高 //char[] value; //这个放在堆

  3. StringBuffer的构造器

    • StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符

    • StringBuffer(CharSequence seq) public java.long.StringBuilder(CharSequence seq) 构造一个

      字符串缓冲区,它包含与其指定的CharSequence 相同的字符。 (不常用)

    • StringBuffer(int capacity) //capacity[容量] 构造一个不带字符,但具有指定初始容量的字符串缓冲区。

      即对 char[] 大小进行指定

    • StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容

    //1. 创建一个大小为 16的 char[] ,用于存放字符内容
    StringBuffer stringBuffer = new StringBuffer();
    //2. 通过构造器指定 char[] 大小
    StringBuffer sTringBuffer = new StringBuffer(100);
    //3. 通过给一个String 创建 StringBuffer,char[] 大小就是 str.length() + 16
    StringBuffer hello = new StringBuffer("hello");
    
  4. String 和 StringBuffer 相互转换

    // String -> StringBuffer
    String str = "hello tom";
    // 方式1
    // 注意:返回的才是StringBuffer对象,对str 本身没有影响
    StringBuffer stringBuffer = new StringBuffer(str);
    //方式2   使用的时append() 方法
    StringBuffer stringBuffer1 = new StringBuffer();
    stringBuffer1 = stringBuffer1.append(str);
    // StringBuffer -> String
    StringBuffer stringBuffer3 = new StringBuffer("好好学习");
    //方法1 使用StringBuffer提供的 toString方法
    String s = stringBuffer3.toString();
    //方式2:使用构造器来搞定
    String s1 = new String(stringBuffer3);
    
  5. StringBuffer类常用方法

    StringBuffer s = new StringBuffer("hello");
    //增
    s.append(',');
    s.append("张三丰");
    s.append("赵敏").append(100).append(true).append(10.5);
    System.out.println(s);
    
    //删
    /*
        删除索引为 >=start && <end 处的字符
        删除 11-14的字符 [11,14)
     */
    s.delete(11,14);
    System.out.println(s);
    
    //改
    //使用 周芷若 替换 索引9-11的字符 [9,11)
    s.replace(9,11,"周芷若");
    System.out.println(s);
    
    //查找
    //查找指定的字符串在字符串中第一次出现的索引,如果找不到返回-1
    int indexOf = s.indexOf("张三丰");
    System.out.println(indexOf);
    
    //插
    //在索引为9的位置插入 赵敏 ,原来索引为9的内容自动后移
    s.insert(9,"赵敏");
    System.out.println(s);
    
    //长度
    System.out.println(s.length());
    System.out.println(s);
    
  6. 练习

    String price = "8123564.59";
    StringBuffer sb = new StringBuffer(price);
    //int i = sb.lastIndexOf(".");
    //sb = sb.insert(i - 3,",");
    for (int i = sb.lastIndexOf("."); i > 3; i -= 3) {
        sb = sb.insert(i - 3,",");
    }
    System.out.println(sb);
    //运行结果:8,123,564.59
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值