Java中的StringBuffer

时间:2020-02-23 14:37:27  来源:igfitidea点击:

Java中的StringBuffer用于创建可修改的String对象。
这意味着我们可以使用StringBuffer追加,反转,替换,连接和操作字符串或者字符序列。
分别创建StringBuffer类下的相应方法以遵守这些功能。

在Java中,字符串被认为是不可变的或者不可编辑的,除非被覆盖。
这是StringBuffer类出现的地方,它可以容纳字符序列并仍启用可变功能。

Java中的StringBuffer

Java中有关StringBuffer的一些重要点是:

  • StringBuffer与String类非常相似,但具有可变性功能。

  • 与Strings的长度和内存分配是最终的不一样,StringBuffer具有修改这些属性的现有方法。

  • StringBuffer是线程安全的,大多数方法都是同步的。
    因此,多个线程不能同时访问或者使用StringBuffer对象。

  • java.lang.StringBuffer扩展了AbstractStringBuilder抽象类。

  • StringBuffer从java.lang继承了clone(),equals(),finalize(),getClass(),hashCode(),notify()和notifyAll()方法。
    对象的超类。

  • StringBuffer实现了CharSequence,Appendable和Serializable接口。

  • StringBuffer的" capacity()"方法可用于检索可用于添加新字符序列的内存,超过此数量将进行分配。

  • 与StringBuilder类相比,StringBuffer由于同步而运行较慢。

Java StringBuffer类具有字符序列内存分配的灵活性。
这意味着我们可以使用StringBuffer类修改给定的String。
使之成为可能的原因是StringBuffer类保留了临时内存以供将来修改。

StringBuffer类图

下图说明了StringBuffer类实现的接口。
注意,StringBuffer扩展了Java 1.5引入的AbstractStringBuilder类。

StringBuffer构造函数

  • StringBuffer():创建一个带有空内容和默认16个保留字符的StringBuffer。

  • StringBuffer(int sizeOfBuffer):创建一个StringBuffer,其中传递的参数为空缓冲区的大小。

  • StringBuffer(String string):创建一个StringBuffer,将传递的String作为缓冲区的初始内容。
    为了修改目的,预先分配了16个或者有内存字符,不包括缓冲区。

StringBuffer方法

  • length():返回StringBuffer对象的长度。

  • capacity():返回StringBuffer对象的容量。

StringBuffer sb = new StringBuffer();

上面的StringBuffer示例程序产生的输出:

StringBuffer sb = new StringBuffer(20);
  • append():将指定的参数字符串表示形式附加在现有字符串缓冲区的末尾。
    所有原始数据类型和Object都重载了此方法。
StringBuffer sb = new StringBuffer("Hello World!");
  • insert():insert()方法有两个参数-用于插入值的索引整数值和要插入的值。
    索引告诉StringBuffer其中插入传递的字符序列。
    同样,此方法已重载以使用原始数据类型和对象。
package com.theitroad.java;

public class StringBufferExample {

	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer("Hello");
		int sbLength = sb.length();
		int sbCapacity = sb.capacity();
		System.out.println("String Length of " + sb + " is " + sbLength);
		System.out.println("Capacity of " + sb + " is " + sbCapacity);
	}

}
  • reverse():反转缓冲区中现有的String或者字符序列的内容并返回它。
    该对象必须具有现有内容,否则将引发NullPointerException。
String Length of Hello is 5
Capacity of Hello is 21
  • delete(int startIndex,int endIndex):接受两个整数参数。
    前者用作开始删除索引,而后者用作结束删除索引。
    因此,startIndex和endIndex-1之间的字符序列将被删除。
    返回缓冲区中剩余的String内容。
StringBuffer sb = new StringBuffer("Hello ");

sb.append("World ");

sb.append(2016);

System.out.println(sb);
  • deleteCharAt(int index):删除缓冲区内String中的单个字符。
    删除字符的位置由传递的整数索引确定。
    返回缓冲区中剩余的String内容。
StringBuffer sb = new StringBuffer("HelloWorld ");

sb.insert(5, " ");

sb.insert(sb.length(), 2016);

System.out.println(sb);
  • replace(int startIndex,int endIndex,String str):接受三个参数:前两个参数是现有字符串缓冲区的开始和结束索引。
    因此,删除了startIndex和endIndex-1之间的字符序列。
    然后,将作为第三个参数传递的String插入到startIndex处。
StringBuffer sb = new StringBuffer("Hello World");

System.out.println(sb.reverse());