Skip to main content

Java StringBuffer class - Lớp StringBuffer trong Java

1. Khái niệm

Lớp StringBuffer cung cấp các phương thức khác nhau để thao tác một đối tượng dạng chuỗi. Lớp StringBuffer được sử dụng để tạo chuỗi có thể thay đổi (mutable). Lớp StringBuffer trong java tương tự như lớp String ngoại trừ nó có thể thay đổi. 

Package: java.lang

StringBuffer-in-Java.png

2. Khởi tạo đối tượng lớp StringBuffer
  • StringBuffer(): Tạo ra một bộ đệm chuỗi với dung lượng ban đầu là 16.
  • StringBuffer(String str): Tạo ra một bộ đệm chuỗi với chuỗi cụ thể.
  • StringBuffer(int capacity): Tạo ra một bộ đệm chuỗi với dung lượng được chỉ định như độ dài chuỗi.

Ví dụ:

class StringBufferCons {

    public static void main(String args[]) {
        StringBuffer s1 = new StringBuffer();
        StringBuffer s2 = new StringBuffer(20);
        StringBuffer s3 = new StringBuffer(“StringBuffer”);

        System.out.println("s3 = " + s3);
        System.out.println(s2.length()); //chứa 0
        System.out.println(s3.length()); //chứa 12
        System.out.println(s1.capacity()); //chứa 16
        System.out.println(s2.capacity()); //chứa 20
        System.out.println(s3.capacity()); //chứa 28
    }
}

length()capacity() của đối tượng StringBuffer là hoàn toàn khác nhau. Phương thức length() đề cập đến số các ký tự mà đối tượng đưa ra, trong khi capacity() trả về tổng dung lượng mặc định của một đối tượng (16), và số các ký tự trong đối tượng StringBuffer.

3. Các phương thức lớp StringBuffer
  • public synchronized StringBuffer append(String s): được sử dụng để nối thêm các chuỗi được chỉ định với chuỗi này. Các phương thức append() được nạp chồng như append(char), append(boolean), append(int), append(float), append(double), …
  • public synchronized StringBuffer insert(int offset, String s): được sử dụng để chèn chuỗi chỉ định với chuỗi này tại vị trí quy định. Các phương thức insert() được nạp chồng như insert(int, char), insert(int, boolean), insert(int, int), insert(int, float), insert(int, double), …
  • public synchronized StringBuffer replace(int startIndex, int endIndex, String str): được sử dụng để thay thế chuỗi từ vị trị startIndex đến endIndex bằng chuỗi str.
  • public synchronized StringBuffer delete(int startIndex, int endIndex): được sử dụng để xóa chuỗi từ vị trí startIndex đến endIndex.
  • public synchronized StringBuffer reverse(): được sử dụng để đảo ngược chuỗi.
  • public int capacity(): được sử dụng để trả về dung lượng hiện tại.
  • public void ensureCapacity(int minimumCapacity): được sử dụng để đảm bảo dung lượng ít nhất bằng mức tối thiểu nhất định.
  • public char charAt(int index): được sử dụng trả về ký tự tại vị trí quy định.
  • public int length(): được sử dụng trả về chiều dài của chuỗi nghĩa là tổng số ký tự.
  • public String substring(int beginIndex): được sử dụng trả về chuỗi con bắt đầu từ vị trí được chỉ định.
  • public String substring(int beginIndex, int endIndex): được sử dụng trả về chuỗi con với vị trí bắt đầu và vị trí kết thúc được chỉ định.

+ append()

Phương thức này nối thêm một chuỗi hoặc một mảng ký tự tại vị trí cuối cùng của một đối tượng StringBuffer. Ví dụ:

StringBuffer s1 = new StringBuffer("Good");
s1.append("evening");

Giá trị trong s1 bây giờ là "goodevening".

+ insert()

Phương thức này lấy hai tham số. Tham số đầu tiên là vị trí chèn. Tham số thứ hai có thể là một chuỗi, một ký tự (char), một giá trị nguyên (int), hay một giá trị số thực (float) được chèn vào. Vị trí chèn sẽ lớn hơn hay bằng đến 0, và nhỏ hơn hay bằng chiều dài của đối tượng Stringbuffer. Bất kỳ đối số nào, trừ ký tự hoặc chuỗi, được chuyển vào biểu mẫu chuỗi, và sau đó được chèn vào. Ví dụ:

StringBuffer str = new StringBuffer("Java sion");
str.insert(1,'b');

Biến "str" chứa chuỗi "Java sion".

+ charAt()

Phương thức này trả về một giá trị ký tự trong đối tượng StringBuffer tại vị trí được chỉ định. Ví dụ:

StringBuffer str = new StringBuffer("James Gosling");
char letter = str.charAt(6); //chứa "G"

+ setCharAt()

Phương thức này được sử dụng để thay thế ký tự trong một StringBuffer với những cái khác tại một vị trí được chỉ định.

StringBuffer name = new StringBuffer("Java");
name.setCharAt(2,’v’);

Biến "name" chứa "Java".

+ setLength()

Phương thức này thiết lập chiều dài của đối tượng StringBuffer. Nếu chiều dài được chỉ định nhỏ hơn chiều dài nguyên thuỷ của bộ nhớ trung gian, thì các ký tự thừa sẽ bị cắt bớt. Nếu chiểu dài chỉ định nhiều hơn chiều dài nguyên thủy của bộ nhớ đệm, các ký tự null được thêm vào tại vị trí cuối cùng của bộ nhớ đệm.

StringBuffer str = new StringBuffer(10);
str.setLength(str.legth() +10);

+ getChars()

Phương thức này được sử dụng để trích ra các ký tự từ đối tượng StringBuffer, và sao chép chúng vào một mảng. Phương thức getChars() lấy bốn tham số sau:

  • Mục bắt đầu: vị trí bắt đầu, từ nơi mà ký tự được lấy vào.
  • Mục kết thúc: vị trí kết thúc
  • Mảng: Mảng đích, nơi mà các ký tự được sao chép.
  • Nơi gởi tới mục bắt đầu: Các ký tự được sao chép trong mảng đích từ vị trí này.

Ví dụ:

StringBuffer str = new StringBuffer("Leopard");
char ch[] = new char[10];
str.getChars(3,6,ch,0);

Bây giờ biến "ch" chứa "par"

+ reverse()

Phương thức này đảo ngược nội dung của một đối tượng StringBuffer, và trả về một đối tượng StringBuffer. Ví dụ:

StringBuffer str = new StringBuffer("devil");
StringBuffer strrev = str.reverse();

Biến "strrev" chứa "lived".

+ replace()

Phương thức replace() của lớp StringBuffer thay thế chuỗi bằng chuỗi khác từ vị trị bắt đầu và kết thúc được quy định.

public class StringBufferExam3 {
    public static void main(String args[]) {
        StringBuffer sb = new StringBuffer("Hello");
        sb.replace(1, 3, "Java");
        System.out.println(sb); //in HJavalo
    }
}

+ delete()

Phương thức replace() của lớp StringBuffer xóa chuỗi từ vị trị bắt đầu và kết thúc được quy định.

public class StringBufferExam4 {
    public static void main(String args[]) {
        StringBuffer sb = new StringBuffer("Hello");
        sb.delete(1, 3);
        System.out.println(sb); //in Hlo
    }
}

+ capacity()

Phương thức capacity() của lớp StringBuffer trả về dung lượng của bộ nhớ đệm. Dung lượng mặc định của bộ nhớ đệm là 16. Nếu số lượng ký tự của chuỗi tăng lên thì dung lượng được tính theo công thức (dung lượng cũ*2)+2. Ví dụ: Nếu dung lượng hiện tại là 16, nó sẽ tăng lên (16*2)+2=34.

public class StringBufferExam6 {
    public static void main(String args[]) {
        StringBuffer sb = new StringBuffer();
        System.out.println(sb.capacity()); //mặc định là 16  
        sb.append("Hello");
        System.out.println(sb.capacity()); //đến đây vẫn là 16  
        sb.append("java is my favourite language");
        System.out.println(sb.capacity()); //đến đây là (16*2)+2=34 i.e (dung lượng cũ*2)+2  
    }
}

+ ensureCapacity()

Phương thức ensureCapacity() của lớp StringBuffer đảm bảo rằng dung lượng đã cho là tối thiểu với dung lượng hiện tại. Nếu nó lớn hơn dung lượng hiện tại, dung lượng hiện tại được tăng theo công thức (dung lượng cũ*2)+2. Ví dụ, dung lượng hiện tại là 16, nó sẽ tăng lên là (16*2)+2=34.

public class StringBufferExam7 {
    public static void main(String args[]) {
        StringBuffer sb = new StringBuffer();
        System.out.println(sb.capacity()); //mặc định là 16  
        sb.append("Hello");
        System.out.println(sb.capacity()); //đến đây là 16  
        sb.append("java is my favourite language");
        System.out.println(sb.capacity()); //đến đây là (16*2)+2=34 i.e (dung lượng cũ*2)+2  
        sb.ensureCapacity(10); //đến đây không có sự thay đổi
        System.out.println(sb.capacity()); //đến đây là 34  
        sb.ensureCapacity(50); //đến đây là (34*2)+2  
        System.out.println(sb.capacity()); //đến đây là 70  
    }
}