"Salam, Amigo!"

"Hello, Rishi!"

"Anda kini cukup tahu tentang rentetan untuk mempelajari sesuatu yang menarik. Lebih khusus lagi, kelas baharu yang serupa dengan, tetapi tidak betul-betul sama dengan, kelas String."

"Bunyinya menarik, walaupun tidak begitu jelas kepada saya bagaimana rentetan biasa menjadi pendek dan mengapa kelas seperti rentetan lain diperlukan."

"Mari kita mulakan dengan fakta bahawa rentetan adalah objek tidak berubah di Jawa."

"Macam mana? Saya terlupa... Atau saya tidak pernah tahu untuk bermula dengan..."

"Biar saya ingatkan anda bahawa objek tidak berubah ialah objek yang keadaannya tidak boleh diubah selepas ia dicipta."

"Ahhh... Kenapa rentetan tidak boleh diubah di Jawa?"

"Ini dilakukan untuk menjadikan kelas String sangat dioptimumkan dan membolehkannya digunakan di mana-mana. Contohnya, hanya jenis tidak berubah disyorkan untuk digunakan sebagai kunci dalam koleksi HashMap .

"Walau bagaimanapun, situasi sering timbul apabila pengaturcara mendapati lebih mudah untuk kelas String boleh berubah. Mereka mahukan kelas yang tidak mencipta subrentetan baharu setiap kali salah satu kaedahnya dipanggil."

"Tetapi untuk apa ia bagus?"

"Nah, katakan kita mempunyai rentetan yang sangat besar dan kita perlu kerap menambahkan sesuatu pada penghujungnya. Dalam kes ini, walaupun koleksi aksara ( ArrayList<Character>) boleh menjadi lebih cekap daripada sentiasa mencipta semula dan menggabungkan objek Rentetan."

"Dan itulah sebabnya kita memerlukan rentetan yang bukan kelas String?"

"Tepat sekali. Bahasa Java telah menambah jenis seperti String yang boleh diubah. Ia dipanggil StringBuilder".

Mencipta objek

"Untuk mencipta StringBuilderobjek berdasarkan rentetan sedia ada, anda perlu melaksanakan pernyataan seperti:

StringBuilder name = new StringBuilder(string);

"Untuk mencipta rentetan boleh ubah kosong, anda perlu menggunakan pernyataan seperti ini:

StringBuilder name = new StringBuilder();

Senarai kaedah

" StringBuilderKelas ini mempunyai dua dozen kaedah yang berguna. Berikut ialah kaedah yang paling penting:

Kaedah Penerangan
StringBuilder append(obj)
Menukar objek yang diluluskan kepada rentetan dan menambahkannya pada rentetan semasa
StringBuilder insert(int index, obj)
Menukar objek yang diluluskan kepada rentetan dan sisipan di tengah rentetan semasa
StringBuilder replace(int start, int end, String str)
Menggantikan bahagian rentetan yang ditentukan oleh selang permulaan..akhir dengan rentetan yang diluluskan
StringBuilder deleteCharAt(int index)
Mengalih keluar aksara dengan indeks yang ditentukan daripada rentetan
StringBuilder delete(int start, int end)
Mengalih keluar aksara dalam selang yang ditentukan daripada rentetan
int indexOf(String str, int index)
Mencari subrentetan dalam rentetan semasa
int lastIndexOf(String str, int index)
Mencari subrentetan dalam rentetan semasa, bermula dari penghujung
char charAt(int index)
Mengembalikan aksara dalam rentetan pada indeks yang diluluskan
String substring(int start, int end)
Mengembalikan subrentetan yang ditakrifkan oleh selang waktu yang ditentukan
StringBuilder reverse()
Membalikkan rentetan semasa.
void setCharAt(int index, char)
Menukar aksara pada indeks yang ditentukan kepada aksara yang diluluskan
int length()
Mengembalikan panjang rentetan dalam aksara

"Dan sekarang saya akan menerangkan secara ringkas setiap kaedah ini kepada anda.

Melampirkan pada rentetan

"Untuk menambah sesuatu pada rentetan boleh ubah ( StringBuilder), gunakan append()kaedah. Contoh:

Kod Penerangan
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

Menukar kepada rentetan standard

"Untuk menukar StringBuilderobjek kepada objek String, anda hanya perlu memanggil kaedahnya toString(). Contoh

Kod Pengeluaran
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

Bagaimanakah saya memadamkan aksara?

"Untuk memadamkan aksara dalam rentetan boleh ubah, anda perlu menggunakan deleteCharAt()kaedah tersebut. Contoh:

Kod Pengeluaran
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

Bagaimanakah saya menggantikan sebahagian daripada rentetan dengan rentetan lain?

"Untuk ini ada kaedahnya replace(int begin, int end, String str). Contoh:

Kod Pengeluaran
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello!w

"Kedengaran mudah. ​​Terima kasih, Rishi."

"Jangan sebut. Macam mana ni, boleh awak selak tali ke belakang? Macam mana awak nak buat?"

"Nah... Saya akan mencipta StringBuilder, meletakkan rentetan di dalamnya... Kemudian buat rentetan baharu, dan dalam gelung daripada aksara terakhir ke yang pertama... Atau mungkin anjakan sedikit...

"Tidak buruk. Tetapi ia mungkin lebih pantas. Terdapat kaedah khas untuk melakukan ini — reverse();Contoh:

Kod Pengeluaran
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

"Selain StringBuilderkelas, Java mempunyai satu lagi kelas seperti rentetan yang dipanggil StringBuffer. Ia adalah analog kelas StringBuilder, tetapi kaedahnya ditandakan dengan synchronizedpengubah suai."

"Apa maksudnya?"

"Ini bermakna StringBufferobjek itu boleh diakses secara serentak daripada berbilang benang."

"Saya masih belum begitu mahir dengan benang. Tetapi 'boleh diakses daripada berbilang benang' jelas lebih baik daripada 'tidak boleh diakses daripada berbilang benang'... Mengapa tidak selalu menggunakannya? StringBuffer"

"Kerana ia jauh lebih perlahan daripada StringBuilder. Anda mungkin memerlukan kelas sedemikian apabila anda mula meneroka secara aktif multithreading dalam pencarian Java Multithreading .

"Saya akan menulis itu untuk ingatan saya supaya tidak lupa. Ditandakan 'untuk masa depan'.