當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java StringBuffer用法及代碼示例


StringBuffer 是 Java 中的一個類,表示可變的字符序列。它提供了不可變 String 類的替代方案,允許您修改字符串的內容,而無需每次都創建新對象。

以下是 StringBuffer 類的一些重要函數和方法:

  1. StringBuffer 對象是可變的,這意味著您可以更改緩衝區的內容而無需創建新對象。
  2. StringBuffer的初始容量可以在創建時指定,也可以稍後使用ensureCapacity()方法設置。
  3. append() 方法用於將字符、字符串或其他對象添加到緩衝區末尾。
  4. insert()方法用於在緩衝區中的指定位置插入字符、字符串或其他對象。
  5. delete() 方法用於從緩衝區中刪除字符。
  6. reverse()方法用於反轉緩衝區中字符的順序。

以下是使用 StringBuffer 連接字符串的示例:

Java


public class StringBufferExample {
    public static void main(String[] args)
    {
        StringBuffer sb = new StringBuffer();
        sb.append("Hello");
        sb.append(" ");
        sb.append("world");
        String message = sb.toString();
        System.out.println(message);
    }
}
輸出
Hello world

與 Java 中的常規 String 對象相比,使用 StringBuffer 有幾個優點:

  1. 可變:StringBuffer對象是可變的,這意味著您可以在創建對象後修改其內容。相比之下,字符串對象是不可變的,這意味著字符串一旦創建就無法更改其內容。
  2. 高效:因為 StringBuffer 對象是可變的,所以它們比每次需要修改字符串時創建新的 String 對象更高效。如果您需要多次修改字符串,則尤其如此,因為對 String 對象的每次修改都會創建一個新對象並丟棄舊對象。
  3. 線程安全:StringBuffer對象是線程安全的,這意味著多個線程可以同時訪問它(它們可以被多個線程同時安全地訪問和修改)。相比之下,String 對象不是線程安全的,這意味著如果要從多個線程訪問 String 對象,則需要使用同步。

總的來說,如果需要對字符串進行多次修改,或者需要從多個線程訪問字符串,使用 StringBuffer 比使用常規 String 對象更高效、更安全。

StringBuffer是一個同級類 String 它提供了字符串的許多函數。字符串表示固定長度、不可變的字符序列,而StringBuffer表示可增長且可寫的字符序列。StringBuffer可以在中間插入或附加到末尾的字符和子字符串。它會自動增長,為此類添加騰出空間,並且通常會預先分配比實際需要更多的字符,以留出增長空間。

StringBuffer 類用於創建可變(可修改)字符串。 Java 中的 StringBuffer 類與 String 類相同,隻是它是可變的,即可以更改。

StringBuffer 類的重要構造函數

  • StringBuffer():創建一個空字符串緩衝區,初始容量為16。
  • StringBuffer(String str):用指定的字符串創建一個字符串緩衝區。
  • StringBuffer(intcapacity):創建一個空字符串緩衝區,以指定容量為長度。

1.append()方法

append() 方法將給定參數與該字符串連接起來。

例子:

Java


import java.io.*;
class A {
    public static void main(String args[])
    {
        StringBuffer sb = new StringBuffer("Hello ");
        sb.append("Java"); // now original string is changed
        System.out.println(sb);
    }
}
輸出
Hello Java

2.insert()方法

insert() 方法將給定字符串插入到給定位置。

例子:

Java


import java.io.*;
class A {
    public static void main(String args[])
    {
        StringBuffer sb = new StringBuffer("Hello ");
        sb.insert(1, "Java");
        // Now original string is changed
        System.out.println(sb);
    }
}
輸出
HJavaello 

3.replace()方法

replace() 方法替換指定的 beginIndex 和 endIndex-1 中的給定字符串。

例子:

Java


import java.io.*;
class A {
    public static void main(String args[])
    {
        StringBuffer sb = new StringBuffer("Hello");
        sb.replace(1, 3, "Java");
        System.out.println(sb);
    }
}
輸出
HJavalo

4.delete()方法

StringBuffer 類的delete() 方法刪除從指定的beginIndex 到endIndex-1 的字符串。

例子:

Java


import java.io.*;
class A {
    public static void main(String args[])
    {
        StringBuffer sb = new StringBuffer("Hello");
        sb.delete(1, 3);
        System.out.println(sb);
    }
}
輸出
Hlo

5.reverse()方法

StringBuilder 類的 reverse() 方法反轉當前字符串。

例子:

Java


import java.io.* ;
class A {
    public static void main(String args[])
    {
        StringBuffer sb = new StringBuffer("Hello");
        sb.reverse();
        System.out.println(sb);
    }
}
輸出
olleH

6.capacity()方法

  • StringBuffer 類的capacity() 方法返回緩衝區的當前容量。緩衝區的默認容量為 16。如果字符數比當前容量增加,則容量增加 (oldcapacity*2)+2。
  • 例如,如果您當前的容量為16,則為(16*2)+2=34。

例子:

Java


import java.io.*;
class A {
    public static void main(String args[])
    {
        StringBuffer sb = new StringBuffer();
        System.out.println(sb.capacity()); // default 16
        sb.append("Hello");
        System.out.println(sb.capacity()); // now 16
        sb.append("java is my favourite language");
        System.out.println(sb.capacity());
        // Now (16*2)+2=34     i.e (oldcapacity*2)+2
    }
}
輸出
16
16
34

關於 StringBuffer 課程的一些有趣的事實

請牢記以下幾點:

  • java.lang.StringBuffer 擴展(或繼承)Object.
  • StringBuffer 類的所有已實現接口:Serializable、Appendable、CharSequence。
  • public final class StringBuffer 擴展了 Object 實現了 Serializable、CharSequence、Appendable。
  • 字符串緩衝區可供多個線程安全使用。可以在必要時同步這些方法,以便任何特定實例上的所有操作的行為就好像它們按某種串行順序發生一樣。
  • 每當發生涉及源序列的操作(例如從源序列追加或插入)時,此類僅在執行操作的字符串緩衝區上同步,而不在源上同步。
  • 它繼承了Object類的一些方法,例如clone()、equals()、finalize()、getClass()、hashCode()、notifies(),notifyAll()。

Remember: StringBuilder, J2SE 5 adds a new string class to Java’s already powerful string handling capabilities. This new class is called StringBuilder. It is identical to StringBuffer except for one important difference: it is not synchronized, which means that it is not thread-safe. The advantage of StringBuilder is faster performance. However, in cases in which you are using multithreading,  you must use StringBuffer rather than StringBuilder.

StringBuffer 類的構造函數

1.StringBuffer():預留16個字符的空間,無需重新分配

StringBuffer s = new StringBuffer();

2. StringBuffer( int 大小):它接受一個整數參數,明確設置緩衝區的大小。

StringBuffer s = new StringBuffer(20);

3. 字符串緩衝區(字符串str):它接受一個字符串 設置 StringBuffer 對象的初始內容並為 16 個以上字符保留空間而無需重新分配的參數。

StringBuffer s = new StringBuffer("GeeksforGeeks");

Java StringBuffer 類的方法

方法 執行的操作
append() 用於在現有文本的末尾添加文本。
length() StringBuffer的長度可以通過length( )方法找到
capacity() 總分配容量可以通過capacity()方法找到
charAt() 此方法返回此序列中指定索引處的 char 值。
delete() 從調用對象中刪除字符序列
deleteCharAt() 刪除指定索引處的字符位置
ensureCapacity() 確保容量至少等於給定的最小值。
insert() 在指定索引位置插入文本
length() 返回字符串的長度
reverse() 反轉 StringBuffer 對象中的字符
replace() 將 StringBuffer 對象中的一組字符替換為另一組字符

Note: Besides that, all the methods that are used in the String class can also be used. These auxiliary methods are as follows:

方法

說明

用法

StringBuffer ensureCapacity()

它用於增加StringBuffer對象的容量。新容量將設置為我們指定的值或當前容量的兩倍加二(即容量+2),以較大者為準。這裏,容量指定緩衝區的大小。

void EnsureCapacity(int 容量)

StringBuffer appendCodePoint()

此方法將 codePoint 參數的字符串表示形式附加到該序列。

公共StringBufferappendCodePoint(int codePoint)

charAt(int 索引)

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

公共 char charAt(int 索引)

IntStream chars()

此方法返回 int zero-extending 此序列中的 char 值的流。

公共 IntStream chars()

StringBuffer codePointAt()

此方法返回指定索引處的字符(Unicode 代碼點)。

公共 int codePointAt(int 索引)

StringBuffer codePointBefore()

此方法返回指定索引之前的字符(Unicode 代碼點)。

公共 int codePointBefore(int 索引)

StringBuffer codePointCount()

此方法返回此序列的指定文本範圍內的 Unicode 代碼點的數量。

公共 int codePointCount(int beginIndex, int endIndex)

IntStream codePoints()

此方法返返回自該序列的代碼點值流。

公共 IntStream codePoints()

StringBuffer getChars()

在此方法中,字符被從此序列複製到目標字符數組 dst 中。

公共無效 getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

StringBuffer indexOf()

此方法返回此字符串中指定子字符串第一次出現的索引。

公共intindexOf(字符串str)
公共intindexOf(字符串str,intfromIndex)

StringBuffer lastIndexOf()

此方法返回此字符串中最後一次出現的指定子字符串的索引。

公共intlastIndexOf(字符串str)
公共intlastIndexOf(字符串str,intfromIndex)

StringBuffer offsetByCodePoints()

此方法返回此序列中的索引,該索引與給定索引的偏移量為 codePointOffset 代碼點。

公共 int offsetByCodePoints(int 索引, int codePointOffset)

StringBuffer setCharAt()

在此方法中,指定索引處的字符被設置為 ch。

公共無效setCharAt(int索引,字符ch)

StringBuffer setLength()

該方法設置字符序列的長度。

公共無效setLength(int newLength)

StringBuffer subSequence()

此方法返回一個新的字符序列,它是該序列的子序列。

公共CharSequence子序列(int開始,int結束)

StringBuffer substring()

此方法返回一個新字符串,其中包含當前包含在此字符序列中的字符子序列。

公共字符串子字符串(int開始)
公共字符串子字符串(int開始,int結束)

StringBuffer toString()

此方法返回一個表示該序列中的數據的字符串。

公共字符串toString()

StringBuffer trimToSize()

此方法嘗試減少用於字符序列的存儲。

公共無效trimToSize()

Above we only have discussed the most widely used methods and do keep a tight bound around them as they are widely used in programming geeks.

E上述方法的示例

示例 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 and 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);
    }
}
輸出
Length of string GeeksforGeeks=13
Capacity of string GeeksforGeeks=29

示例 2:StringBuffer append()

它用於在現有文本的末尾添加文本。

以下是它的一些形式:

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()

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

用法:其中一些如下:

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

在這裏, index 指定索引,在該索引處字符串將被插入到調用中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: StringBuffer 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:StringBuffer delete()StringBuffer deleteCharAt()

它可以使用以下方法刪除StringBuffer中的字符刪除( )刪除字符()。這刪除( )方法從調用對象中刪除字符序列。此處,起始索引指定要刪除的第一個字符的索引,結束索引指定要刪除的最後一個字符之後的索引。因此,刪除的子字符串從 startIndex 到 endIndex-1。返回結果StringBuffer 對象。這刪除字符()方法刪除指定索引處的字符地點它返回生成的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: StringBuffer replace()

它可以通過調用replace()將StringBuffer對象中的一組字符替換為另一組字符。被替換的子字符串由索引 startIndex 和 endIndex 指定。因此,從 startIndex 到 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

本文由洛克什·托德瓦爾。



相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 StringBuffer class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。