--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);
}
}