"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 StringBuilder
objek 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
" StringBuilder
Kelas ini mempunyai dua dozen kaedah yang berguna. Berikut ialah kaedah yang paling penting:
Kaedah | Penerangan |
---|---|
|
Menukar objek yang diluluskan kepada rentetan dan menambahkannya pada rentetan semasa |
|
Menukar objek yang diluluskan kepada rentetan dan sisipan di tengah rentetan semasa |
|
Menggantikan bahagian rentetan yang ditentukan oleh selang permulaan..akhir dengan rentetan yang diluluskan |
|
Mengalih keluar aksara dengan indeks yang ditentukan daripada rentetan |
|
Mengalih keluar aksara dalam selang yang ditentukan daripada rentetan |
|
Mencari subrentetan dalam rentetan semasa |
|
Mencari subrentetan dalam rentetan semasa, bermula dari penghujung |
|
Mengembalikan aksara dalam rentetan pada indeks yang diluluskan |
|
Mengembalikan subrentetan yang ditakrifkan oleh selang waktu yang ditentukan |
|
Membalikkan rentetan semasa. |
|
Menukar aksara pada indeks yang ditentukan kepada aksara yang diluluskan |
|
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 |
---|---|
|
Hi |
Menukar kepada rentetan standard
"Untuk menukar StringBuilder
objek kepada objek String, anda hanya perlu memanggil kaedahnya toString()
. Contoh
Kod | Pengeluaran |
---|---|
|
Hi123 |
Bagaimanakah saya memadamkan aksara?
"Untuk memadamkan aksara dalam rentetan boleh ubah, anda perlu menggunakan deleteCharAt()
kaedah tersebut. Contoh:
Kod | Pengeluaran |
---|---|
|
Helo |
Bagaimanakah saya menggantikan sebahagian daripada rentetan dengan rentetan lain?
"Untuk ini ada kaedahnya replace(int begin, int end, String str)
. Contoh:
Kod | Pengeluaran |
---|---|
|
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 |
---|---|
|
olleH |
"Selain StringBuilder
kelas, Java mempunyai satu lagi kelas seperti rentetan yang dipanggil StringBuffer
. Ia adalah analog kelas StringBuilder
, tetapi kaedahnya ditandakan dengan synchronized
pengubah suai."
"Apa maksudnya?"
"Ini bermakna StringBuffer
objek 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'.
GO TO FULL VERSION