📜  Java中的StringBuffer类

📅  最后修改于: 2022-05-13 01:55:13.377000             🧑  作者: Mango

Java中的StringBuffer类

StringBufferString的对等类,它提供了字符串的大部分功能。字符串表示固定长度、不可变的字符序列,而 StringBuffer 表示可增长和可写的字符序列。 StringBuffer可能有字符和子字符串插入中间或附加到末尾。它 将自动增长以为此类添加腾出空间,并且通常预先分配的字符多于实际需要的字符,以留出增长空间。

关于 StringBuffer 类的一些有趣的事实

请牢记以下几点:  

  • Java.lang.StringBuffer 扩展(或继承自)Object 类。
  • StringBuffer 类的所有实现接口:Serializable、Appendable、CharSequence。
  • public final 类 StringBuffer 扩展 Object 实现 Serializable、CharSequence、Appendable。
  • 字符串缓冲区可以安全地被多个线程使用。这些方法可以在任何需要的地方同步,以便任何特定实例上的所有操作都表现得好像它们以某种顺序发生一样。
  • 每当发生涉及源序列的操作(例如从源序列追加或插入)时,此类仅在执行操作的字符串缓冲区上同步,而不在源上同步。
  • 它继承了 Object 类的一些方法,例如clone()、equals()、finalize()、getClass()、hashCode()、 notifies() 、notifyAll()。

StringBuffer 类的构造函数

1. StringBuffer() :保留16个字符的空间,无需重新分配

StringBuffer s = new StringBuffer();

2. StringBuffer(int size) :它接受一个整数参数,明确设置缓冲区的大小。

StringBuffer s = new StringBuffer(20);

3. StringBuffer(String str):接受一个字符串 参数设置 StringBuffer 对象的初始内容并为另外 16 个字符保留空间而无需重新分配。

StringBuffer s = new StringBuffer("GeeksforGeeks");

StringBuffer 类的方法

MethodsAction Performed
append()Used to add text at the end of the existing text.
length()The length of a StringBuffer can be found by the length( ) method
capacity()the total allocated capacity can be found by the capacity( ) method
charAt() 
delete()Deletes a sequence of characters from the invoking object
deleteCharAt()Deletes the character at the index specified by loc
ensureCapacity()Ensures capacity is at least equals to the given minimum.
insert()Inserts text at the specified index position
length()Returns length of the string  
reverse()Reverse the characters within a StringBuffer object
replace()Replace one set of characters with another set inside a StringBuffer object

  • 确保容量()

它用于增加 StringBuffer 对象的容量。新容量将设置为我们指定的值或当前容量的两倍加二(即容量+2),以较大者为准。在这里,容量指定缓冲区的大小。

句法:

void ensureCapacity(int capacity)
  • appendCodePoint(int codePoint) 此方法将 codePoint 参数的字符串表示附加到此序列。

句法:

public StringBuffer appendCodePoint(int codePoint)
  • charAt(int 索引)

此方法返回此序列中指定索引处的 char 值。

句法:

public char charAt(int index)
  • IntStream chars() :此方法返回一个 int 流,对来自该序列的 char 值进行零扩展。

句法:

public IntStream chars()
  • int codePointAt(int index) :此方法返回指定索引处的字符(Unicode 代码点)。

句法:

public int codePointAt(int index)
  • int codePointBefore(int index) :此方法返回指定索引之前的字符(Unicode 代码点)。

句法:

public int codePointBefore(int index)
  • int codePointCount(int beginIndex, int endIndex) :此方法返回此序列的指定文本范围内的 Unicode 代码点数。

句法:

public int codePointCount(int beginIndex, int endIndex)
  • IntStream codePoints() :此方法从该序列返回代码点值流。

句法:

public IntStream codePoints()
  • void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) :在此方法中,字符从该序列复制到目标字符数组 dst。

句法:

public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
  • int indexOf(String str) :此方法返回此字符串中第一次出现指定子字符串的索引。

句法:

public int indexOf(String str)
public int indexOf(String str, int fromIndex)
  • int lastIndexOf(String str) :此方法返回此字符串中最后一次出现指定子字符串的索引。

句法:

public int lastIndexOf(String str)
public int lastIndexOf(String str, int fromIndex)
  • int offsetByCodePoints(int index, int codePointOffset) :此方法返回此序列中的索引,该索引与给定索引偏移 codePointOffset 代码点。

句法:

public int offsetByCodePoints(int index, int codePointOffset) 
  • void setCharAt(int index, char ch) : 在这个方法中,指定索引处的字符被设置为 ch。

句法:

public void setCharAt(int index, char ch)
  • void setLength(int newLength) :此方法设置字符序列的长度。

句法:

public void setLength(int newLength)
  • CharSequence subSequence(int start, int end) :这个方法返回一个新的字符序列,它是这个序列的子序列。

句法:

public CharSequence subSequence(int start, int end)
  • String substring(int start) :此方法返回一个新字符串,其中包含当前包含在此字符序列中的字符子序列。

句法:

public String substring(int start)
public String substring(int start,int end)
  • String toString() :此方法返回一个表示此序列中数据的字符串。

句法:

public String toString()
  • void trimToSize() :此方法尝试减少用于字符序列的存储空间。

句法:

public void trimToSize()

执行:

示例 1: length() 和 capacity()方法

Java
// Java Program to Illustrate StringBuffer class
// via length() and capacity() methods
 
// Importing I/O classes
import java.io.*;
 
// Main class
class GFG {
 
    // main driver method
    public static void main(String[] args)
    {
 
        // Creating adn storing string by creating object of
        // StringBuffer
        StringBuffer s = new StringBuffer("GeeksforGeeks");
 
        // Getting the length of the string
        int p = s.length();
 
        // Getting the capacity of the string
        int q = s.capacity();
 
        // Printing the length and capacity of
        // above generated input string on console
        System.out.println("Length of string GeeksforGeeks="
                           + p);
        System.out.println(
            "Capacity of string GeeksforGeeks=" + q);
    }
}


Java
// Java Program to Illustrate StringBuffer class
// via append() method
 
// Importing required classes
import java.io.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an object of StringBuffer class and
        // passing random string
        StringBuffer s = new StringBuffer("Geeksfor");
 
        // Usage of append() method
        s.append("Geeks");
 
        // Returns GeeksforGeeks
        System.out.println(s);
 
        s.append(1);
        // Returns GeeksforGeeks1
        System.out.println(s);
    }
}


Java
// Java Program to Illustrate StringBuffer class
// via insert() method
 
// Importing required I/O classes
import java.io.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an object of StringBuffer class
        StringBuffer s = new StringBuffer("GeeksGeeks");
 
        // Inserting element and position as an arguments
        s.insert(5, "for");
        // Returns GeeksforGeeks
        System.out.println(s);
 
        s.insert(0, 5);
        // Returns 5GeeksforGeeks
        System.out.println(s);
 
        s.insert(3, true);
        // Returns 5GetrueeksforGeeks
        System.out.println(s);
 
        s.insert(5, 41.35d);
        // Returns 5Getr41.35ueeksforGeeks
        System.out.println(s);
 
        s.insert(8, 41.35f);
        // Returns 5Getr41.41.3535ueeksforGeeks
        System.out.println(s);
 
        // Declaring and initializing character array
        char geeks_arr[] = { 'p', 'a', 'w', 'a', 'n' };
 
        // Inserting character array at offset 9
        s.insert(2, geeks_arr);
        // Returns 5Gpawanetr41.41.3535ueeksforGeeks
        System.out.println(s);
    }
}


Java
// Java Program to Illustrate StringBuffer class
// via reverse() method
 
// Importing I/O classes
import java.io.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Creating a string via creating
        // object of StringBuffer class
        StringBuffer s = new StringBuffer("GeeksGeeks");
 
        // Invoking reverse() method
        s.reverse();
 
        // Returns "skeeGrofskeeG"
        System.out.println(s);
    }
}


Java
// Java Program to Illustrate StringBuffer class
// via delete() and deleteCharAt() Methods
 
// Importing I/O classes
import java.io.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        StringBuffer s = new StringBuffer("GeeksforGeeks");
 
        s.delete(0, 5);
        // Returns forGeeks
        System.out.println(s);
 
        s.deleteCharAt(7);
        // Returns forGeek
        System.out.println(s);
    }
}


Java
// Java Program to Illustrate StringBuffer class
// via replace() method
 
// Importing I/O classes
import java.io.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        StringBuffer s = new StringBuffer("GeeksforGeeks");
        s.replace(5, 8, "are");
 
        // Returns GeeksareGeeks
        System.out.println(s);
    }
}


输出
Length of string GeeksforGeeks=13
Capacity of string GeeksforGeeks=29

示例 2:追加()  

它用于在现有文本的末尾添加文本。

以下是它的几种形式:

StringBuffer append(String str)
StringBuffer append(int num)

Java

// Java Program to Illustrate StringBuffer class
// via append() method
 
// Importing required classes
import java.io.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an object of StringBuffer class and
        // passing random string
        StringBuffer s = new StringBuffer("Geeksfor");
 
        // Usage of append() method
        s.append("Geeks");
 
        // Returns GeeksforGeeks
        System.out.println(s);
 
        s.append(1);
        // Returns GeeksforGeeks1
        System.out.println(s);
    }
}
输出
GeeksforGeeks
GeeksforGeeks1

示例 3:插入()

它用于在指定的索引位置插入文本。

语法:以下是其中的一些:

StringBuffer insert(int index, String str)
StringBuffer insert(int index, char ch)

在这里,索引指定将字符串插入调用StringBuffer对象的索引。

Java

// Java Program to Illustrate StringBuffer class
// via insert() method
 
// Importing required I/O classes
import java.io.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an object of StringBuffer class
        StringBuffer s = new StringBuffer("GeeksGeeks");
 
        // Inserting element and position as an arguments
        s.insert(5, "for");
        // Returns GeeksforGeeks
        System.out.println(s);
 
        s.insert(0, 5);
        // Returns 5GeeksforGeeks
        System.out.println(s);
 
        s.insert(3, true);
        // Returns 5GetrueeksforGeeks
        System.out.println(s);
 
        s.insert(5, 41.35d);
        // Returns 5Getr41.35ueeksforGeeks
        System.out.println(s);
 
        s.insert(8, 41.35f);
        // Returns 5Getr41.41.3535ueeksforGeeks
        System.out.println(s);
 
        // Declaring and initializing character array
        char geeks_arr[] = { 'p', 'a', 'w', 'a', 'n' };
 
        // Inserting character array at offset 9
        s.insert(2, geeks_arr);
        // Returns 5Gpawanetr41.41.3535ueeksforGeeks
        System.out.println(s);
    }
}
输出:
GeeksforGeeks
5GeeksforGeeks
5GetrueeksforGeeks
5Getr41.35ueeksforGeeks
5Getr41.41.3535ueeksforGeeks
5Gpawanetr41.41.3535ueeksforGeeks

示例 4:反向()

它可以使用reverse() 反转StringBuffer 对象中的字符。此方法返回调用它的反转对象。  

Java

// Java Program to Illustrate StringBuffer class
// via reverse() method
 
// Importing I/O classes
import java.io.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Creating a string via creating
        // object of StringBuffer class
        StringBuffer s = new StringBuffer("GeeksGeeks");
 
        // Invoking reverse() method
        s.reverse();
 
        // Returns "skeeGrofskeeG"
        System.out.println(s);
    }
}
输出
skeeGskeeG

示例 5: delete()deleteCharAt()

它可以使用delete( )deleteCharAt( )方法删除StringBuffer 中的字符。delete( )方法从调用对象中删除一个字符序列。这里,开始索引指定要删除的第一个字符的索引,结束索引指定要删除的最后一个字符的索引。因此,删除的子串从 start Index 运行到 endIndex–1。返回生成的 StringBuffer 对象。 deleteCharAt()方法删除由loc指定的索引处的字符。它返回生成的 StringBuffer 对象。

句法:

StringBuffer delete(int startIndex, int endIndex)
StringBuffer deleteCharAt(int loc)

Java

// Java Program to Illustrate StringBuffer class
// via delete() and deleteCharAt() Methods
 
// Importing I/O classes
import java.io.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        StringBuffer s = new StringBuffer("GeeksforGeeks");
 
        s.delete(0, 5);
        // Returns forGeeks
        System.out.println(s);
 
        s.deleteCharAt(7);
        // Returns forGeek
        System.out.println(s);
    }
}
输出
forGeeks
forGeek

示例 6:替换()

它可以通过调用replace() 将StringBuffer 对象中的一组字符替换为另一组字符。被替换的子字符串由索引 start Index 和 endIndex 指定。因此,从 start Index 到 endIndex–1 的子字符串被替换。替换字符串在 str 中传递。返回生成的 StringBuffer 对象。

句法:

StringBuffer replace(int startIndex, int endIndex, String str)

例子

Java

// Java Program to Illustrate StringBuffer class
// via replace() method
 
// Importing I/O classes
import java.io.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        StringBuffer s = new StringBuffer("GeeksforGeeks");
        s.replace(5, 8, "are");
 
        // Returns GeeksareGeeks
        System.out.println(s);
    }
}
输出
GeeksareGeeks