String对象用来操作字符串,但是在操作多次的时候,String就不合适了,这时需要引入StringBuffer和StringBuilder;
StringBuffer:
StringBuffer是使用缓冲区的,方法是同步的,适合在多线程条件下使用,对于StringBuffer而言,本身是一个具体的操作类,所以不能像String那样采用直接赋值的方式进行对象实例化,必须通过构造方法完成。
StringBuffer的主要方法
序号 | 方法描述 |
---|---|
1 | public StringBuffer append(String s) 将指定的字符串追加到此字符序列。 |
2 | public StringBuffer reverse() 将此字符序列用其反转形式取代。 |
3 | public delete(int start, int end) 移除此序列的子字符串中的字符。 |
4 | public insert(int offset, int i) 将int参数的字符串表示形式插入此序列中。 |
5 | replace(int start, int end, String str) 使用给定String中的字符替换此序列的子字符串中的字符。 |
StringBuffer对象的初始化
StringBuffer s = new StringBuffer();
StringBuffer s = new StringBuffer(“abc”);
StringBuffer和String属于不同的类型,不能直接进行强制类型转换!
字符串连接
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("Hello ") ; // 向StringBuffer中添加内容
buf.append("World").append("!!!") ; // 可以连续调用append()方法
buf.append("\n") ; // 添加一个转义字符
buf.append("数字 = ").append(1).append("\n") ; // 添加数字
buf.append("字符 = ").append('C').append("\n"); // 添加字符
buf.append("布尔 = ").append(true) ; // 添加布尔值
System.out.println(buf) ; // 直接输出对象,调用toString()
结果输出:
Hello World!!!
数字 = 1
字符 = C布尔 = true
StringBuilder
StringBuilder是StringBuffer的异步版本,如果不需要同步的话,应优先选择StringBuilder
StringBuilder的四个构造方法
public StringBuilder()
public StringBuilder(CharSequence seq)
public StringBuilder(int capacity)
public StringBuilder(String string)
如果在创建StringBuilder对象时没有指定大小,这个对象将拥有十六个字符的初始大小。如果内容超过了其容量,对象将自动增加大小。如果在创建前知道内容将会超过十六个字符,最好分配足够的空间,因为增加容量也会花费一定时间
StringBuilder有几个方法,主要有以下几个:
//获取StringBuilder对象的容量
public int capacity();
//获取StringBuilder对象所存储的字符串的长度
public int length();
//将指定的String对象添加到StringBuilder对象末尾,包括多种重载形式
public StringBuilder append(String string);
//在offset指定的位置插入指定字符串,包括多种重载形式
public StringBuilder insert(int offset,String string);
//返回一个String对象
public String toString();
//append方法继承了Appendable接口
//所以要实现append方法append方法StringBuilder类对几乎所有的基本类型都重载了append方法
append(boolean b)
append(char c)
append(char[] str)
append(char[] str,int offset,int len)
append(CharSequence s)
append(CharSequence s,int start,int end)
append(double d)
append(float f)
append(int i)
append(long lng)
append(Object obj)
append(String str)
append(StringBuffer sb)
//insert方法
//insert方法可以控制插入的起始位置,也几乎对所有的基本类型都重载了insert方法:
insert(int offser,boolean b)
insert(int offset,char c)
insert(int offset,char[] str)
insert(int index,char[] str,int offset,int len)
insert(int dsfOffset,CharSequence s)
insert(int dsfOffset,CharSequence s,int start,int end)
insert(int offset,double d)
insert(int offset,float f)
insert(int offset,int i)
insert(int offset,long l)
insert(int offset,Object obj)
insert(int offset,String str)
StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
参考–百度百科