字符串处理 StringBuffer类

一个 String 型变量一旦经过初始化,就不能改变了。为什么它作为一个变量而又不能改变呢?其实变量只是一个代表某个内存区域的引用符号,用来访问或修改它所指向的内存空间。在String 型变量的情况下,String型变量所指向的内存空间中的内容是不能被改变的,这是java语音规范规定的。但是该变量可用于指向另外的内存空间。下列的代码就说明了这一点:

String s = new String("hello");
s = "Hello world";  //现在s指向内存中的新位置。

只改变了变量,并没有改变它所指向的内存中的内容。这一点说明了变量和它所指向的内存之间的区别。
如果想加强对字符串的控制,可以使用StringBuffer类。这个类也是java.lang包的一部分,它提供了可以修改字符串内容的方法:

StringBuffer s = new StringBuffer("Hello");
s.setCharAt(1,'o')  // s的内容为 "Hollo";

StringBuffer的setCharAt()方法对字符串中的一个字符做了修改,第一个参数确定了被修改字符在整个字符串中的索引位置,第二个参数为修改后的新值。

在实际应用中,经常会遇到对字符串内容进行动态修改。在这种情况下,String 类在功能受到限制。Java提供了StringBuffer类来实现对字符串内容进行动态修改功能。根据StringBuffer类中提供成员方法分类。StringBuffer类主要用于完成字符串的动态添加,插入,替换等操作。

StringBuffer类声明和实例化

StringBuffer类的声明在形式上和String类是一样的。

StringBuffer s;
s= new StringBuffer("Hello");
//或
String s = new StringBuffer("Hello");

StringBuffer类的构造方法

构造方法 说明
StringBuffer() 构造一个不包含字符的字符串缓冲区,其初始容量设为16个字符。
StringBuffer(int) 构造一个不包含字符的字符串缓冲区,其初始容量由参数设定
StringBuffer(String) 构造一个字符串缓冲区,来表示和字符串相同的字符序列,字符串缓冲区的初始容量为16加上字符串参数的长度

StringBuffer类的常用方法

1、添加操作append()

该功能主要有StringBuffer类中成员方法Append完成,其作用就是将一个字符添加到另一个字符串缓冲区的后面。在应用中,如果添加字符的长度超过字符串缓冲区的长度,则字符串缓冲区自动将长度进行扩充。
append()方法的声明格式:

public StringBuffer append(boolean b)
public StringBuffer append(char c)
public StringBuffer append(char[] str)
public StringBuffer append(char[] str, int offset, int len)
public StringBuffer append(double d)
public StringBuffer append(float f)
public StringBuffer append(int i)
public StringBuffer append(long l)
public StringBuffer append(Object obj)
public StringBuffer append(String str)

上面列举的构造方法,可用来向字符串缓冲区添加逻辑变量,字符,字符数组,双精度数,浮点数,整型数,对象类型的字符串和字符串等。上述类型的返回类型均为StringBuffer.

StringBuffer sbsource = new StringBuffer("1+2 = ");
int nThree =3;
sbsource.append(nThree);
System.out.println(sbsource.toString());    // "1+2 = 3"

2、插入操作insert()

insert()方法的声明格式:

public StringBuffer insert(intoffset,boolean b)
public synchronized StringBuffer insert(int offset, char[] str)
public synchronized StringBuffer insert(int index, char[] sb, int offset, int len)
public StringBuffer insert(int offset,double d)
public StringBuffer insert(int offset, float f)
public StringBuffer insert(int offset, long l)
public synchronized  StringBuffer insert(int offset, Object obj)
public synchronized StringBuffer insert(int offset, String str)

字符串缓冲区StringBuffer 的插入操作主要用于动态地向StringBuffer 中添加字符。根据构造方法中的参数类型,可以向字符串缓冲区插入逻辑变量,字符,字符数组,双精度数,浮点数,整型数,长整型数,对象类型的字符串和字符串等。上述方法的返回类型为StringBuffer

StringBuffer sbsource = new StringBuffer("1+ = 2");
int nOne =1;
sbsource.insert(2,nOne);
System.out.println(sbSource.toString());    //"1+1 = 2

3、字符串缓冲区与字符串之间的转换

toString();
将字符串缓冲区转换为字符串,该方法返回类型为字符串。该方法是从缓冲区字符串向字符串转换的方法,十分重要。

4、取字符

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

StringBuffer sbfsource = new StringBuffer(10);
sbfsource.append("My");
char c = sbfsource.charAt(0)    // 'M'

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

StringBuffer sbfsource = new StringBuffer("You are the best");
char[] str;
sbfsource.getChars(0,2,str,0);      // 'Yo'

5、删除字符

1) public StringBuffer delete(int start, int end)
删除字符串缓冲区中起始号为 start、终止号为 end -1 的字符。方法的返回值为 StringBuffer 类型。

StringBuffer sbfsource = new StringBuffer("You are the best");
sbfsource.delete(0,2);      // 'u are the best'

2) public StringBuffer deleteCharAt(int index)
删除字符串缓冲区中指定位置的字符。方法的返回值为 StringBuffer.

6、重设字符串长度

1) public void ensureCapacity(int minimumCapacity)
该方法重新设置字符串缓冲区的长度。但必须保证缓冲区的容量至少等于指定的最小数。如果字符串缓冲区的当前容量小于子参数,则分配一个新的更大的内部缓冲区。新容量将取如下参入中较大的一个:

  • 参数 minimumCapacity。
  • 旧容量的两倍加 2

如果 minimumCapacity 非正,则该方法不做任何操作,只简单地返回。

2) public void SetLength(int newLength)
该方法将重新设置字符串缓冲区的长度。设置该字符串缓冲区的长度时,如果参数 newLength 小于该字符串缓冲区的当前长度。该字符串缓冲区将被截断来包含恰好等于由参数 newLength 给出的字符数。

7、内容替换

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

StringBuffer sbfsource = new StringBuffer("You are the best");
String str = new String("I'm");
sbfsource.replace(0,7,str)  //"I'm the best"

8、取子串

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

StringBuffer sbfsource = new StringBuffer("You are the best");
sbfsource.substring(0,2);   //"Yo"

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

9、字符串反转

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

StringBuffer sbfsource = new StringBuffer("You are the best");
String str = sbfsource.reverse();   //"tseb eht era uoY"

10、获取长度

1)public int capacity()
用于得到目前字符串缓冲区的容量,该方法的返回值类型为整数。

StringBuffer sbfsource = new Stringbuffer(10)
sbfSource.append("you");
sbfSource.capacity()    // 10;

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

StringBuffer sbfsource = new Stringbuffer(10)
sbfSource.append("you");
sbfSource.lengt()   // 3;

你可能感兴趣的:(java)