"Xin chào, Amigo!"

"Xin chào, Rishi!"

"Bây giờ bạn đã biết đủ về chuỗi để tìm hiểu điều gì đó thú vị. Cụ thể hơn, một lớp mới tương tự, nhưng không hoàn toàn giống với lớp Chuỗi."

"Nghe có vẻ hấp dẫn, mặc dù đối với tôi nó không hoàn toàn rõ ràng tại sao các chuỗi thông thường thiếu hụt như thế nào và tại sao các lớp giống như chuỗi khác lại cần thiết."

"Hãy bắt đầu với thực tế là chuỗi là đối tượng bất biến trong Java."

"Làm sao vậy? Tôi quên mất... Hay là tôi chưa từng biết từ đầu..."

"Hãy để tôi nhắc bạn rằng các đối tượng bất biến là những đối tượng mà trạng thái của chúng không thể thay đổi sau khi chúng được tạo ra."

"Ahhh... Tại sao các chuỗi không thay đổi trong Java?"

"Điều này đã được thực hiện để làm cho lớp Chuỗi được tối ưu hóa cao và cho phép nó được sử dụng ở mọi nơi. Ví dụ: chỉ các loại bất biến được khuyến nghị sử dụng làm khóa trong bộ sưu tập HashMap .

"Tuy nhiên, các tình huống thường phát sinh khi các lập trình viên thấy thuận tiện hơn khi lớp Chuỗi có thể thay đổi được. Họ muốn một lớp không tạo chuỗi con mới mỗi khi một trong các phương thức của nó được gọi."

"Nhưng nó tốt để làm gì?"

"Chà, giả sử chúng ta có một chuỗi rất lớn và chúng ta cần thường xuyên thêm thứ gì đó vào cuối chuỗi. Trong trường hợp này, ngay cả một tập hợp các ký tự ( ArrayList<Character>) cũng có thể hiệu quả hơn việc liên tục tạo lại và nối các đối tượng Chuỗi."

"Và đó là lý do tại sao chúng ta cần các chuỗi không hoàn toàn là lớp Chuỗi?"

"Chính xác. Ngôn ngữ Java đã thêm một loại kiểu Chuỗi có thể thay đổi được. Nó được gọi là StringBuilder".

Tạo một đối tượng

"Để tạo một StringBuilderđối tượng dựa trên một chuỗi hiện có, bạn cần thực hiện một câu lệnh như:

StringBuilder name = new StringBuilder(string);

"Để tạo một chuỗi trống có thể thay đổi, bạn cần sử dụng một câu lệnh như sau:

StringBuilder name = new StringBuilder();

Danh sách các phương pháp

" StringBuilderLớp có hai chục phương pháp hữu ích. Dưới đây là những phương pháp quan trọng nhất:

Phương pháp Sự miêu tả
StringBuilder append(obj)
Chuyển đổi đối tượng đã truyền thành một chuỗi và nối nó vào chuỗi hiện tại
StringBuilder insert(int index, obj)
Chuyển đổi đối tượng đã truyền thành một chuỗi và chèn vào giữa chuỗi hiện tại
StringBuilder replace(int start, int end, String str)
Thay thế một phần của chuỗi được chỉ định bởi khoảng thời gian bắt đầu..kết thúc bằng chuỗi đã truyền
StringBuilder deleteCharAt(int index)
Xóa ký tự có chỉ số đã chỉ định khỏi chuỗi
StringBuilder delete(int start, int end)
Xóa các ký tự trong khoảng thời gian đã chỉ định khỏi chuỗi
int indexOf(String str, int index)
Tìm kiếm một chuỗi con trong chuỗi hiện tại
int lastIndexOf(String str, int index)
Tìm kiếm một chuỗi con trong chuỗi hiện tại, bắt đầu từ cuối
char charAt(int index)
Trả về ký tự trong chuỗi tại chỉ mục đã truyền
String substring(int start, int end)
Trả về chuỗi con được xác định bởi khoảng thời gian đã chỉ định
StringBuilder reverse()
Đảo ngược chuỗi hiện tại.
void setCharAt(int index, char)
Thay đổi ký tự tại chỉ mục đã chỉ định thành ký tự đã truyền
int length()
Trả về độ dài của chuỗi theo ký tự

"Và bây giờ tôi sẽ mô tả ngắn gọn từng phương pháp này cho bạn.

Nối vào một chuỗi

"Để thêm một cái gì đó vào một chuỗi có thể thay đổi ( StringBuilder), hãy sử dụng append()phương thức này. Ví dụ:

Mã số Sự miêu tả
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

Chuyển đổi thành một chuỗi tiêu chuẩn

"Để chuyển một StringBuilderđối tượng thành đối tượng String, bạn chỉ cần gọi toString()phương thức của nó. Ví dụ

Mã số đầu ra
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

Làm cách nào để xóa một ký tự?

"Để xóa một ký tự trong chuỗi có thể thay đổi, bạn cần sử dụng deleteCharAt()phương thức. Ví dụ:

Mã số đầu ra
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

Làm cách nào để thay thế một phần của chuỗi bằng một chuỗi khác?

"Đối với điều này có replace(int begin, int end, String str)phương pháp. Ví dụ:

Mã số đầu ra
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello!w

"Nghe có vẻ thuận tiện. Cảm ơn, Rishi."

"Đừng đề cập đến nó. Làm thế nào về điều này, bạn có thể lật ngược một sợi dây? Bạn sẽ làm điều đó như thế nào?"

"Chà... Tôi sẽ tạo một StringBuilder, đặt một chuỗi vào đó... Sau đó tạo một chuỗi mới, và trong một vòng lặp từ ký tự cuối cùng đến ký tự đầu tiên... Hoặc có thể thay đổi một chút...

"Không tệ. Nhưng nó có thể nhanh hơn. Có một phương pháp đặc biệt để làm việc này — reverse();Ví dụ:

Mã số đầu ra
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

"Bên cạnh StringBuilderlớp, Java còn có một lớp giống như chuỗi khác được gọi là StringBuffer. Nó là một dạng tương tự của StringBuilderlớp, nhưng các phương thức của nó được đánh dấu bằng công synchronizedcụ sửa đổi."

"Điều đó nghĩa là gì?"

"Điều đó có nghĩa là StringBufferđối tượng có thể được truy cập đồng thời từ nhiều luồng."

"Tôi chưa quen thuộc lắm với các luồng. Nhưng 'có thể truy cập từ nhiều luồng' rõ ràng tốt hơn 'không thể truy cập từ nhiều luồng'... Tại sao không sử dụng luôn? StringBuffer"

"Bởi vì nó chậm hơn nhiều so với StringBuilder. Bạn có thể cần một lớp như vậy khi bắt đầu tích cực khám phá đa luồng trong nhiệm vụ Đa luồng Java .

"Tôi sẽ ghi điều đó vào trí nhớ của mình để không quên. Đánh dấu là 'dành cho tương lai'.