欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

StringBuffer详解

程序员文章站 2024-02-26 15:39:34
...

API这样解释:

StringBuffer线程安全可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。 

可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。 

StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。 

例如,如果 z 引用一个当前内容为 "start" 的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含 "startle",而 z.insert(4, "le") 将更改字符串缓冲区,使之包含 "starlet"。 

通常,如果 sb 引用 StringBuilder 的一个实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。 

当发生与源序列有关的操作(如源序列中的追加或插入操作)时,该类只在执行此操作的字符串缓冲区上而不是在源上实现同步。 

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 

JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。 

String类创建的字符串对象是不可修改的,也就是说,String字符串不能修改、删除或替换字符串中的某个字符,即String对象一旦创建,那么实体是不可以再发生变化的.
StringBuffer类能创建可修改的字符串序列,也就是说,该类的对象的实体的内存空间可以自动的改变大小,便于存放一个可变的字符序列。  

StringBuffer:String增强版

StringBuffer声明
StringBuffer sb = new StringBuffer();
StringBuffer sb = new StringBuffer("aaa");

StringBuffer的使用

sb.toString();//转换为String类型
sb.apend("**");//追加字符串

StringBuffer类提供了四种构造方法,其格式如下:

Public StringBuffer();
构造一个不包含字符的字符串缓冲区,其初始的容量设为 16 个字符。

public StringBuffer(int);
构造一个不包含字符的字符串缓冲区,其初始容量由参数设定。

public StringBuffer(String);
构造一个字符串缓冲区,来表示和字符串参数相同的字符序列。 字符串缓冲区的初始容量为16加上字符串参数的长度。

public StringBuffer(CharSequence seq);
构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符

public synchronized StringBuffer append()
该功能是将一个字符添加到另一个字符串缓冲区的后面。在应用中,如果添加字符的长度超过字符串缓冲区的的长度,则字符串缓冲区自动将长度进行扩充。
可用来向字符串缓冲区添加逻辑变量、字符、字符数组、双精度数、浮点数、整型数、长整型数、对象类型的字符串和字符串等。

public int capacity()
用于得到目前字符串缓冲区的剩余长度,该方法的返回类型为整数

public int length( )
用于得到字符串缓冲区中字符串的长度。该方法的返回类型为整数。

public void ensureCapacity(int minimumCapacity)
该方法重新设置字符串缓冲区的长度。但必须保证缓冲区的容量至少等于指定的最小数。

public void SetLength(int newLength)
指定了新字符序列的长度,如果参数 newLength 小于该字符串缓冲区的当前长度。 该字符串缓冲区将被截断来包含恰好等于由参数 newLength 给出的字符数,如果参数大于该字符串的当前长度,空字符将被加在现存缓冲区的后面。

public StringBuffer  insert(int index,String str)
字符串缓冲区StringBuffer的插入操作主要用于动态地向字符串缓冲区插入逻辑变量、字符、字符数组、双精数、浮点数、整型数、长整型数、对象类型的字符串和字符串等。

public StringBuffer reverse()
将字符串序列进行反转,结果为StringBuffer。

char charAt(int index)
取得指定位置的字符。返回值类型为字符char。位置编号从0开始。

void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin)
赋值指定位置的字符到字符串数组dst. 无返回值 

void setCharAt(int n,char ch)
将指定位置n的字符,替换成ch,位置编号从0开始

public StringBuffer  replace(int start,int end,String str)
将字符串缓冲区中起始位置为start、终止位置为end的字符替换为由字符串str指定的内容。

StringBuffer delete(int start,int end)
删除字符串缓冲区中起始序号为start、终止序号为end-1的字符。

StringBuffer deleteCharAt(int index)
删除字符串缓冲区中指定位置的字符,方法的返回类型为StringBuffer

public StringBuffer  replace(int start,int end,String str)
将字符串缓冲区中起始位置为start、终止位置为end的字符替换为由字符串str指定的内容。
下面的代码段为replace方法的例子:
StringBuffer sbfSource=new StringBuffer("You are the best!");
String str=new String("I'm"); 
sbfSource.replace(0,7,str); // I'm the best!

publuc String substring(int start,int end)
取得字符串缓冲区中起始位置为start、终止位置为end的内容,方法返回类型为String。

public String substring(int start)
取得字符串缓冲区中从起始位置为start直至字符串缓冲区结束的所有字符,方法返回类型为String。


例子:
public class Test {  
    public static void main(String[] args) {  
        StringBuffer strBuffer = new StringBuffer();  
        strBuffer.append("StringBuffer");  
        strBuffer.append(" ");  
        strBuffer.append("Test");  
        System.out.println(strBuffer.toString());  
          
        StringBuilder strBuilder = new StringBuilder();  
        strBuilder.append("StringBuffer");  
        strBuilder.append(" ");  
        strBuilder.append("Test");  
        System.out.println(strBuilder.toString());  
    }  
}  


相关标签: StringBuffer