javaSE-day03-StringBuilder修改字符串

  • java.lang.StringBuilder:
    • 专门用来修改String的一个API,内部维护一个可变的char数组,修改都是在这个数组上进行的,内部会自动扩容
    • 修改速度和性能开销优异,并且提供了修改字符串的常见操作对应的方法
    • 增:append();
    • 删:delete();
    • 改:replace();
    • 插:insert();
 String str = "我爱java";

 //修改字符串用StringBuilder
 //内存里是一个新开辟的char数组对象
 StringBuilder builder = new StringBuilder(str);
  • append();-----------------增:追加内容
builder.append(",嘿嘿!");

//可以得到builder的内容,是一个char数组
System.out.println(builder);            //我爱java,嘿嘿!
System.out.println(str);                //我爱java,注:原字符串内容没有变化

/**
 *通过调用builder.toString()方法将builder内容以字符串形式返回
 *builder.toString(),在堆里开辟了一个新的内存,存放对象,把它的地址交给str
 *原字符串的对象就没有指向了,str指向新的字符串对象
 *
 *注:str接收新地址后,原对象就没有地址了称为垃圾
 *
 */
str = builder.toString();
System.out.println(str);                //我爱java,嘿嘿!
  • delete();------------------删:删除部分内容
builder.delete(0,start-1);
System.out.println(builder);                //,为了改变世界!

deleteCharAt(int i);删除一个字符 

  • replace();----------------改:替换/修改内容
/**
 * 好好学习,嘿嘿!
 * 好好学习,为了改变世界!
 * replace替换
 * 内部维护一个可变的char数组,修改都是在这个数组上进行的,内部会自动扩容,
 */
  int start = str.indexOf(",")+1;            //含头
  int end = str.indexOf("!");                //不含尾
  builder.replace(start,end,"为了改变世界");
  str = builder.toString();
  System.out.println(str);                    //我爱java,为了改变世界!
  • insert();-------------------插:插入
builder.insert(0,"活着");
System.out.println(builder);                //活着,为了改变世界!
  • reverse();-----------------反转
builder.reverse();
System.out.println(builder);                //!界世变改了为,着活
  • StringBuilder线程不安全的
public static void main(String[] args) {
        //StringBuilder扩容,一次扩容一段,不是追加一个扩容一个
        //这样字符串修改的性能,就大大增加了,不会像String 每修改一次 创建一个对象而导致内存溢出
        StringBuilder sb = new StringBuilder("av");
        for(int i=0;i<10000000;i++){
            sb.append("1");
        }
        System.out.println("over");

        /*
            +拼接字符串其实就是追了append,编译器在编译的时候,看见有+拼接字符串了
            就会自动将拼接内容改为如下内容,所以偶尔用一次+拼接是无关紧要的,但是大量数据的时候
            就不可以了,+一次创建一个对象,会导致内存溢出
            String s = "a";
            for(int i=0;i<1000000;i++){
                s = s +"a";
                //其实就是 s = new StringBuilder(s).append("a").toString();
            }
            System.out.println("over");
        */
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值