首页 > 编程笔记 > Java笔记 阅读:11

Java StringBuffer字符串类的用法(非常详细,附带实例)

在 Java 中,字符串是作为内置对象进行处理的。在 java.lang 包中有两个专门处理字符串的类,分别是 String 和 StringBuffer。

StringBuffer 类定义在 java.lang 包中,因此可以自动被所有程序利用。StringBuffer类被声明为 final,意味着它均没有子类,也不能被用户自定义的类继承。

在实际应用中,经常会遇到对字符串进行动态修改。String 类的功能无法满足这些要求,而 StringBuffer 类可以完成字符串的动态添加、插入和替换等操作。StringBuffer 表示变长且可写的字符序列。

Java StringBuffer的构造方法

StringBuffer类的构造方法有 4 种,分别是:
StringBuffer()
StringBuffer(int capacity)
StringBuffer(String str)
StringBuffer(CharSequence seq)

当没有指定缓冲区的大小时,StringBuffer 类会分配 16 个附加字符的空间,这是因为再分配在时间上代价很大,且频繁地再分配会产生内存碎片。

Java StringBuffer类常用方法

1) append()方法

可以向已经存在的 StringBuffer 对象追加任何类型的数据,StringBuffer 类提供相应的 append() 方法,如下所示:
StringBuffer append(boolean b)
StringBuffer append(char c)
StringBuffer append(char[]str)
StringBuffer append(char[]str,int offset,int len)
StringBuffer append(CharSequence s)
StringBuffer append(CharSequence s,int start,int end)
StringBuffer append(double d)
StringBuffer append(float f)
StringBuffer append(int i)
StringBuffer append(1ong lng)
StringBuffer append(Object obj)
StringBuffer append(String str)
StringBuffer append(StringBuffer sb)
可以使用 append() 方法追加各种类型的数据,包括 String、char、boolean、各种基本类型的包装类(如 Integer、Double 等),以及其他 StringBuffer 或 StringBuilder 对象。如果添加的字符超出字符串缓冲区的长度,Java 将自动进行扩充。

示例代码如下:
String question = new String("1+1=");
int answer = 3;
boolean result = (1+1==3);
StringBuffer sb = new StringBuffer();
sb.append(question);
sb.append(answer);
sb.append('\t');
sb.append(result);
System.out.println(sb);
执行上述代码段,则输出结果为:

1+1=3  false

2) length()和capacity()方法

每一个 StringBuffer 对象有两个很重要的属性,分别是长度和容量。

通过调用 length() 方法可以得到当前 StringBuffer 的长度,而通过调用 capacity() 方法可以得到总的分配容量。它们的一般形式如下:
int length()
int capacity()
请看下面的示例:
StringBuffer sb=new StringBuffer("Hello");
System.out.println("buffer=”+sb);
System.out.println("length=”+sb.length());
System.out.println("capacity=”+sb. capacity ());
执行上述代码,则输出结果如下所示:
buffer=Hello
length=5
capacity=21
通过这个例子很好地说明 StringBuffer 是如何为另外的处理预留额外空间的。

3) ensureCapacity()和setLength()方法

ensureCapacity 方法的一般形式如下:
void ensureCapacity(int minimumCapacity)
其功能是确保字符串容量至少等于指定的最小值。如果当前容量小于 minimumCapacity 参数,则分配一个具有更大容量的、新的内部数组。新容量的大小应大于 minimumCapacity 与(2*旧容量+2)中的最大值。如果 minimumCapacity 为非正数,此方法不进行任何操作,直接返回。

使用 setLength() 方法可以设置字符序列的长度,其一般形式如下:
void setLength(int len)
这里 len 指定新字符序列的长度,这个值必须是非负的。如果 len 小于当前长度,则长度将被改为指定的长度,如果 len 大于当前长度,则增加缓冲区的大小。空字符将被加在现存缓冲区的后面。

下面两段代码是这两个方法的应用:
StringBuffer sb1 = new StringBuffer(5);
StringBuffer sb2 = new StringBuffer(5);
sb1.ensureCapacity(6);
sb2.ensureCapacity(100);
System.out.println( "sb1.Capacity: " + sb1.capacity() );
System.out.println( "sb2.Capacity: " + sb2.capacity() );
执行此段代码,则输出结果为:
sb1.Capacity: 12
sb2.Capacity: 100

接着有如下代码段:
StringBuffer sb = new StringBuffer("0123456789");
sb.setLength(5);
System.out.println( "sb: " + sb );
执行上述代码,则结果为:
sb: 01234

4) insert()方法

insert() 方法主要用来将一个字符串插入另一个字符串中。和 append() 方法一样,insert() 方法被重载以接收所有简单类型的值,以及 Object、String 和 CharSequence 对象的引用。

首先调用 String 类的 valueOf() 方法,得到相应的字符串表达式,随后这个字符串被插入所调用的 StringBuffer 对象中。

insert() 方法有如下几种形式:
StringBuffer insert(int offset,boo1ean b)
StringBuffer insert(int offset,cbar c)
StringBuffer insert(int offset,char[]str)
StringBuffer insert(int index,char[]str,int offset,int len)
StringBuffer insert(int dstOffset,CharSequence s)
StringBuffer insert(int dstOffset,CharSequence s,int start,int end)
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)

6) reverse()方法

可以使用 reverse() 方法将 StringBuffer 对象内的字符串进行翻转,一般形式如下:
StringBuffer reverse()
例如下面的程序段:
StringBuffer s=new StringBuffer("abcdef");
System.out.println(s);
s.reverse();
System.out.println(s);
代码执行后,输出结果为:
abcdef
fedcba

相关文章