02※、 String增强类:StringBuilder 和 StringBuffer区别:

--String增强类

1、字符串增强类的使用

 ※ String增强类

StringBuilder是线程不安全的String增强类,StringBuilder 和 StringBuffer都是容器, 定义的api(方法)都相同

StringBuffer是线程安全的String增强类。StringBuffer  是一个容器,称为字符串缓冲区,该字符串缓冲区可扩展final类  

 特点: 长度可变化; 可以操作多个数据类型;通过toString()转成String

           如果对字符串进行修改时,无需创建新对象!性能相对String较好

  ※ StringBuilder 和 StringBuffer区别:

     StringBuilder没有线程安全(机制),而 StringBuffer有线程安全的问题

     所以,StringBuilder性能较佳

     StringBuilder版本较新

/**
  * @author Lantzrung
  * @date 2022年7月17日
  * @Description
  */
public class Demo {
	public static void main(String[] args) {
		//字符串的增强类
		StringBuffer sbf = new StringBuffer("it is girl");
		//  * 1.获取
		//  *   char
		//  *   charAt(index)
		//  *   indexOf
		//  *   String substring(start,end)....
		System.out.println(sbf.charAt(0));//i 获取当前定义数值 在该字符串的字符位置
		System.out.println(sbf.indexOf("s"));//4 获取当前定义字符 在该字符串的位置
		System.out.println(sbf.substring(0, 5));//it is 获取 截取 定义开始的字符串

		// 定义的字符串末尾 然后截取该定义的东西
		//  * 2.删除
		//  *   StringBuffer delete(begin,end) 删除一段字符,所要截取的字符串   包含头,不 
        //包含尾
		sbf = sbf.delete(0, 3);// 这里是删除了it加上一个空格 定义了0是i 1是t 2是一个空格 3 
        //不计算
		System.out.println(sbf.delete(0, 3));//直接输出删除后的结果
		System.out.println(sbf);//it girl
		//  *   StringBuffer deleteCharAt(index)//删除该索引的单个字符
		sbf = sbf.deleteCharAt(2);//删除了定义的字符串中的第一个空格

		//  * 3.存储
		//  *   StringBuffer append() 追加未尾
		sbf.append("!");// 在该字符串末尾添加! 
		System.out.println(sbf);//it is my girl!
		//  *   StringBuffer insert() (offset,str) (该字符串的索引位置,"需要在字符串添加的 
        //内容")
		sbf.insert(6, "my ");// 向字符串第6位,添加"my ";位置。
		System.out.println(sbf);// it is my girl!

		//  * 4.修改
		//  *   replace()
		sbf = sbf.replace(0, 2, "IT");// 修改定义字符串的0到2,原本为it,修改为IT
		System.out.println(sbf);

		//  * 5. 反转
		//  *   reverse()//把数组翻转过来
		sbf.reverse();//!lrig ym si TI
		System.out.println(sbf);

	}
}

2、字符串增强类的安全测试

总结:三种类型的区别以及使用场景

对于普通的操作,操作量不大时使用String

对于大量的更新操作,使用字符串的增强类

--单线程:StringBuilder

--多线程:StringBuffer

String

String使用的时长:2795毫秒

StringBuilder使用的时长:2毫秒

StringBuffer使用的时长:5毫秒

/**
 * @author Lantzrung
 * @date 2022年7月17日
 * @Description
 */
public class Demo1 {
	public static void main(String[] args) {
		// StringBuilder是线程不安全的 StringBuffer是线程安全的

		// 测试String、StringBuilder和StringBuffer数据操作的性能
		/*
		 * String str = "abc"; long start = System.currentTimeMillis(); for (int i = 1;
		 * i < 50000; i++) { str = str + "abc"; } long end = System.currentTimeMillis();
		 * System.out.println("String使用的时长:" + (end - start) + "毫秒");
		 */
		// 线程不安全的
		StringBuilder strBuilder = new StringBuilder("abc");
		long start1 = System.currentTimeMillis();
		for (int i = 1; i < 50000; i++) {
			strBuilder.append("abc");
		}
		long end1 = System.currentTimeMillis();
		System.out.println("StringBuilder使用的时长:" + (end1 - start1) + "毫秒");
		System.out.println("---------------------");
		// 线程安全的
		StringBuffer strBuffer = new StringBuffer("abc");
		long start2 = System.currentTimeMillis();
		for (int i = 1; i < 50000; i++) {
			strBuffer.append("abc");
		}
		long end2 = System.currentTimeMillis();
		System.out.println("StringBuffer使用的时长:" + (end2 - start1) + "毫秒");
	}
}

练习:使用StringBuffer 往一个数值每隔三位(千位)插入一个','

    例如: "88123456789"-->"88,123,456,789"  

           12,345  

/**
 * @author Lantzrung
 * @date 2022年7月17日
 * @Description
 */
public class Demo2 {
	public static void main(String[] args) {
		//创建string
		StringBuilder sbf = new StringBuilder("88123456789");
		// 从低位开始,每隔3位进行插入
		for(int i =sbf.length()-3;i>0;i-=3){
		    sbf=sbf.insert(i,",");
		}
		System.out.println(sbf);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lantzruk

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值