JAVA的StringBuffer类和String类

StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。

所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。

在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的。

但是有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。

另外由于StringBuffer是线程安全的,关于线程的概念后续有专门的章节进行介绍,所以在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。

1、StringBuffer对象的初始化

StringBuffer对象的初始化不像String类的初始化一样,Java提供的有特殊的语法,而通常情况下一般使用构造方法进行初始化。

例如:

StringBuffer s = new StringBuffer();

这样初始化出的StringBuffer对象是一个空的对象。

如果需要创建带有内容的StringBuffer对象,则可以使用:

StringBuffer s = new StringBuffer(“abc”);

这样初始化出的StringBuffer对象的内容就是字符串”abc”。

需要注意的是,StringBuffer和String属于不同的类型,也不能直接进行强制类型转换,下面的代码都是错误的:

StringBuffer s = “abc”; //赋值类型不匹配

StringBuffer s = (StringBuffer)”abc”; //不存在继承关系,无法进行强转

StringBuffer对象和String对象之间的互转的代码如下:

String s = “abc”;

StringBuffer sb1 = new StringBuffer(“123”);

StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer

String s1 = sb1.toString(); //StringBuffer转换为String

2、StringBuffer的常用方法

StringBuffer类中的方法主要偏重于对于字符串的变化,例如追加、插入和删除等,这个也是StringBuffer和String类的主要区别。

a、append方法

public StringBuffer append(boolean b)

该方法的作用是追加内容到当前StringBuffer对象的末尾,类似于字符串的连接。调用该方法以后,StringBuffer对象的内容也发生改变,例如:

StringBuffer sb = new StringBuffer(“abc”);

sb.append(true);

则对象sb的值将变成”abctrue”。

使用该方法进行字符串的连接,将比String更加节约内容,例如应用于数据库SQL语句的连接,例如:

StringBuffer sb = new StringBuffer();

String user = “test”;

String pwd = “123”;

sb.append(“select * from userInfo where username=“)

.append(user)

.append(“ and pwd=”)

.append(pwd);

这样对象sb的值就是字符串“select * from userInfo where username=test and pwd=123”。

b、deleteCharAt方法

public StringBuffer deleteCharAt(int index)

该方法的作用是删除指定位置的字符,然后将剩余的内容形成新的字符串。例如:

StringBuffer sb = new StringBuffer(“Test”);

sb. deleteCharAt(1);

该代码的作用删除字符串对象sb中索引值为1的字符,也就是删除第二个字符,剩余的内容组成一个新的字符串。所以对象sb的值变为”Tst”。

还存在一个功能类似的delete方法:

public StringBuffer delete(int start,int end)

该方法的作用是删除指定区间以内的所有字符,包含start,不包含end索引值的区间。例如:

StringBuffer sb = new StringBuffer(“TestString”);

sb. delete (1,4);

该代码的作用是删除索引值1(包括)到索引值4(不包括)之间的所有字符,剩余的字符形成新的字符串。则对象sb的值是”TString”。

c、insert方法

public StringBuffer insert(int offset, boolean b)

该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。例如:

StringBuffer sb = new StringBuffer(“TestString”);

sb.insert(4,false);

该示例代码的作用是在对象sb的索引值4的位置插入false值,形成新的字符串,则执行以后对象sb的值是”TestfalseString”。

d、reverse方法

public StringBuffer reverse()

该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。例如:

StringBuffer sb = new StringBuffer(“abc”);

sb.reverse();

经过反转以后,对象sb中的内容将变为”cba”。

e、setCharAt方法

public void setCharAt(int index, char ch)

该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。例如:

StringBuffer sb = new StringBuffer(“abc”);

sb.setCharAt(1,’D’);

则对象sb的值将变成”aDc”。

f、trimToSize方法

public void trimToSize()

该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。

StringBuffer类的方法有:

StringBuffer append(boolean b)这些方法都是向字符串缓冲区“追加”元素,但是,这个“元素”参数可以是布尔量、字符、字符数组、双精度数、浮点数、整型数、长整型数对象类型的字符串、字符串和StringBuffer类等。如果添加的字符超出了字符串缓冲区的长度,Java将自动进行扩充。StringBuffer append(char c)同上StringBuffer append(char[] str)同上StringBuffer append(char[] str, int offset, int len)同上StringBuffer append(double d)同上StringBuffer append(float f)同上StringBuffer append(int i)同上StringBuffer append(long l)同上StringBuffer append(Object obj)同上StringBuffer append(String str)同上StringBuffer append(StringBuffer sb)同上int capacity()返回当前StringBuffer对象(字符串缓冲区)的总空间,而非字符号串的长度。char charAt(int index)在当前StringBuffer对象中取索引号为index的字符。第一个字符的索引为“0”StringBuffer delete(int start, int end)删除当前StringBuffer对象中以索引号start开始,到end结束的子串。StringBuffer deleteCharAt(int index)删除当前StringBuffer对象中索引号为index的字符。void ensureCapacity (int minimumCapacity)重新设置字符号串缓冲区的总空间。如果minimumCapacity大于当前的总空间,则新的空间被设置:一种结果是minimumCapacity;另一种结果是{“老空间”乘2加2}。void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)从当前StringBuffer对象的索引号srcBegin开始,到srcEnd结束的子串,赋值到字符数组dst中,并且从dst的索引号dstBegin开始。int indexOf(String str)返回当前StringBuffer对象中,第一个满足str子串的位置。int indexOf(String str, int fromIndex)从当前StringBuffer对象的fromIndex开始查找,返回第一个满足str子串的位置。StringBuffer insert(int offset, boolean b)这些方法都是在当前StringBuffer对象中插入一个元素,在索引号offset处插入相应的值。StringBuffer insert(int offset, char c)同上StringBuffer insert(int offset, char[] str)同上StringBuffer insert(int index, char[] str, int offset, int len)同上StringBuffer insert(int offset, double d)同上StringBuffer insert(int offset, float f)同上StringBuffer insert(int offset, int i)同上StringBuffer insert(int offset, long l)同上StringBuffer insert(int offset, Object obj)同上StringBuffer insert(int offset, String str)同上int lastIndexOf(String str)返回当前StringBuffer对象中,最后一个满足str子串的位置。int lastIndexOf(String str, int fromIndex)从当前StringBuffer对象的fromIndex开始查找,返回最后一个满足str子串的位置。int length()返回当前StringBuffer对象(字符缓冲区)中,字符串的长度。注意:此方法与capacity() 不同。StringBuffer replace(int start, int end, String str)替换当前StringBuffer对象的字符串。从start开始,到end结束的位置替换成str。StringBuffer reverse()将字符串翻转。void setCharAt(int index, char ch)设置索引号index的字符为ch。void setLength(int newLength)重新设置字符串缓冲区中字符串的长度,如果newLength小于当前的字符串长度,将截去多余的字符。String substring(int start)取当前StringBuffer对象中,从start开始到结尾的子串。String substring(int start, int end)取当前StringBuffer对象中,从start开始到end的子串。String toString()将当前StringBuffer对象转换成String对象

总之,在实际使用时,String和StringBuffer各有优势和不足,可以根据具体的使用环境,选择对应的类型进行使用。

即使是不成熟的尝试,也胜于胎死腹中的策略。

JAVA的StringBuffer类和String类

相关文章:

你感兴趣的文章:

标签云: