1、StringBuffer和StringBuilder介绍
1、Java提供两个可变字符串StringBuffer和StringBuilder,中文翻译为“字符缓冲区”。
2、StringBuffer是线程安全的,它的方法是支持线程同步,在单线环境下会影响效率。StringBuilder是StringBuffer单线程版本,Java5发布后,他不是线程安全的,但他执行效率很高。
3、StringBuffer和StringBuilder具有完全一样的API,即构造方法和普通方法的内容一致。StringBuilder有4个构造方法(同样适用于StringBuffer):
- StringBuilder():创建字符串内容是空的StringBuilder对象,初始默认容量为16个;
- StringBuilder(CharSequence seq):指定CharSequence字符串创建StringBuilder对象。CharSequence为接口类型,它实现的类有String、StringBuffer、StringBuilder等,所以参数seq可以是String、StringBuffer、StringBuilde等类型;
- StringBuilder(int capacity):创建字符串内容是空的StringBuilder对象,初始容量为capacity;
- StringBuilder(String str):指定String字符串创建StringBuilder对象。
1、线程同步是一个多线程的概念,就是当多个线程访问一个方法时,只能由一个优先级高的线程先访问,在访问期间会锁定该方法,其他线程只能等到它访问完成释放锁,才能访问。
2、StringBuilder设计用作简易替换为StringBuffer在正在使用由单个线程字符串缓冲区的地方(如通常是这种情况)。 在可能的情况下,建议使用这个类别优先于StringBuffer ,因为它在大多数实现中将更快。
3、StringBuilder的StringBuilder不能安全使用多线程。 如果需要同步, 那么建议使用StringBuffer 。
4、可变字符串对象的字符缓冲区容量会随着存放的字符串增加而自动增加。
重点来了:可变字符串的作用是什么?(个人理解,求指导!!!)
解:主要是实现对字符串本身进行追加、删除、插入等操作。
2、字符串追加
StringBuilder字符串追加方法是append,append有很多重载方法,可以追加任何类型数据,他的返回值还是StringBuilder。StringBuilder追加法和StringBuffer一样。
字符串追加示例代码如下:
public class StringBuilder_add{
public static void main(String[] args){
//对string字符串追加
String str=new String("Hello");
StringBuilder sb=new StringBuilder(str);
sb.append(" .world");
String strnew=new String(sb);
System.out.println(strnew);
//添加字符和字符串
StringBuilder strBuild=new StringBuilder("Hello");
strBuild.append(" ").append("World");
strBuild.append('.');
System.out.println(strBuild);
//添加布尔值、转义符和空对象
StringBuilder strBuild1=new StringBuilder();
Object obj=null;
strBuild1.append(false).append('\t').append(obj);//false装换成false字符串,null转换成“null”字符串
System.out.println(strBuild1);
//添加数值
StringBuilder num=new StringBuilder();
for(int i=0;i<9;i++){
num.append(i);
}
System.out.println(num);
}
}
运行结果:
Hello .world
Hello World.
false null
012345678
3、字符串插入、删除和替换
- 插入: StringBuilder insert(int offest,String str):在字符缓冲区中索引为offest的字符位置之前插入str,insert有很多重载方法,可以插入任何类型数据。
- 删除:StringBuilder delete(int start,int end):在字符缓冲区中删除子字符串,要删除的字符串从指定索引start到索引end-1处的字符。
- 替换:StirngBuilder replace(int start,int end,String str):从索引start到end-1处插入str字符串;
(StringBuffer方法与StringBuilder一致!!!)
举个栗子:
public class StringTT{
public static void main(String[] args){
//原始不可变字符串
String str1="Java C";
//从不可变的字符串创建可变字符串对象
StringBuilder mstr=new StringBuilder(str1);
//插入字符串
mstr.insert(4," C++");
System.out.println(mstr);
//具有追加效果的插入字符串
mstr.insert(mstr.length()," Objective-C");
System.out.println(mstr);
//追加字符串
mstr.append(" and Swift");
System.out.println(mstr);
//删除字符串
mstr.delete(11,23);
System.out.println(mstr);
}
}
运行结果:
Java C++ C
Java C++ C Objective-C
Java C++ C Objective-C and Swift
Java C++ C and Swift