StringBuffer adalah urutan karakter variabel yang aman dan aman. Ini mewarisi dari AbstractStringBuilder dan mengimplementasikan antarmuka charsequence.
StringBuilder juga merupakan subkelas yang diwarisi dari AbstractStringBuilder; Namun, StringBuilder dan StringBuffer berbeda. Yang pertama tidak aman, sedangkan yang terakhir aman.
Diagram hubungan antara StringBuffer dan Charsequence adalah sebagai berikut:
Kelas StringBuffer seperti string dan juga digunakan untuk mewakili string. Namun, karena implementasi internal StringBuffer berbeda dari String, StringBuffer tidak menghasilkan objek baru saat memproses string, dan lebih baik daripada kelas String dalam penggunaan memori.
Oleh karena itu, saat menggunakannya dalam penggunaan aktual, jika Anda sering perlu memodifikasi string, seperti penyisipan, penghapusan, dll., Lebih cocok untuk menggunakan StringBuffer.
Ada banyak metode di kelas StringBuffer yang sama dengan kelas string. Metode -metode ini secara fungsional sama dengan fungsi di kelas string.
Tetapi ada salah satu perbedaan paling signifikan dalam bahwa setiap modifikasi objek StringBuffer mengubah objek itu sendiri, yang merupakan perbedaan terbesar dari kelas string.
Selain itu, karena StringBuffer aman-utas, ada bab-bab khusus untuk memperkenalkan konsep utas di masa depan, sehingga juga dapat digunakan dalam program multi-threaded, tetapi efisiensi eksekusi program relatif lambat.
0. Inisialisasi Objek StringBuffer
Inisialisasi objek StringBuffer tidak seperti inisialisasi kelas string. Java menyediakan sintaks khusus, dan dalam keadaan normal, umumnya digunakan untuk menginisialisasi menggunakan konstruktor.
Misalnya:
StringBuffer S = StringBuffer baru ();
Objek StringBuffer yang diinisialisasi dengan cara ini adalah objek kosong.
Jika Anda perlu membuat objek StringBuffer dengan konten, Anda dapat menggunakan:
StringBuffer S = StringBuffer baru ("ABC"); Konten objek StringBuffer yang diinisialisasi dengan cara ini adalah string "ABC".
Perlu dicatat bahwa StringBuffer dan String adalah tipe yang berbeda dan tidak dapat dilemparkan secara langsung. Kode berikut salah:
StringBuffer S = "ABC"; // Jenis penugasan tidak cocok dengan StringBuffer S = (StringBuffer) "ABC"; // Tidak ada hubungan warisan dan tidak mungkin untuk memaksa rotasi.
Kode untuk mentransmutasi antara objek StringBuffer dan objek String adalah sebagai berikut:
String S = "ABC"; StringBuffer SB1 = StringBuffer baru ("123"); StringBuffer SB2 = StringBuffer baru (s); // String Convert ke StringBufferstring S1 = SB1.ToString (); // StringBuffer Konversi ke String 1. Daftar fungsi StringBuffer
StringBuffer () StringBuffer (Int Capasity) StringBuffer (String String) StringBuffer (CharSequence CS) StringBuffer Append (Boolean B) StringBuffer Append (int i) StringBuffer Append (Long L) StringBuffer Append (Float F) StringBuffer Append (Double D) Synchronized StringBuffer chars)synchronized StringBuffer append(char[] chars, int start, int length)synchronized StringBuffer append(Object obj)synchronized StringBuffer append(String string)synchronized StringBuffer append(StringBuffer sb)synchronized StringBuffer append(CharSequence s)synchronized StringBuffer append(CharSequence s, int start, int end)StringBuffer appendCodePoint(int codePoint)int capacity()synchronized char charAt(int index)synchronized int codePointAt(int index)synchronized int codePointBefore(int index)synchronized int codePointCount(int beginIndex, int endIndex)synchronized StringBuffer delete(int start, int end)synchronized StringBuffer deleteCharAt(int location)synchronized void EnsureCapacity (int min) Sinkronisasi void getChars (int start, int end, char [] buffer, int idx) indeks intinkronisasi int (string substring, int start) indexof (string string) insert stringBuffer (int string boolean b) sisipan floufer (indeks int string (indeks int i. d) Sinkronisasi StringBuffer Insert (INT INDEX, CHAR CH) Sinkronisasi Insert StringBuffer (INT INDEX, char [] chars) Sinkronisasi insert stringBuffer yang disinkronkan (indeks int, char [] chars, start int, panjang int) Sinkronisasi StringBuffer Synchronized (indeks string) StringBuffer Insert (indeks int (objek obj) Sinkronisasi Sinkronisasi Sinkronisasi Sinkronisasi Sinkronisasi Sinkronisasi Sinkronisasi Sinkronisasi Sinkronisasi Sinkronisasi Sinkronisasi Sinkronisasi Sinkronisasi Sinkronisasi Sinkron, insert(int index, CharSequence s, int start, int end)int lastIndexOf(String string)synchronized int lastIndexOf(String subString, int start)int length()synchronized int offsetByCodePoints(int index, int codePointOffset)synchronized StringBuffer replace(int start, int end, String string)synchronized StringBuffer reverse()synchronized void setCharAt(int index, char ch) Sinkronisasi void setLength (int int) Sinkronisasi charsequence setelah (int start, int end) string sinkronisasi string substring (int start) Sinkronisasi string substring (int start, int end) string sinkronisasi toString () Sinkronisasi void trimtosize ()
2. Contoh StringBuffer
Kode sumber adalah sebagai berikut (StringBufferTest.java):
/*** Program Demo StringBuffer*/impor java.util.hashmap; kelas publik StringBufferTest {public static void main (string [] args) {testinserTapis (); testappendapis (); testReplaceapis (); testDeleteapis (); testIndexapis (); testotherapis (); } / *** Contoh API lain dari StringBuffer* / private static void testotherapis () {System.out.println ("----------------------------- testotherapis --------------------------------"); StringBuffer sBuilder = StringBuffer baru ("0123456789"); int cap = sbuilder.capacity (); System.out.printf ("cap =%d/n", cap); char c = sbuilder.charat (6); System.out.printf ("c =%c/n", c); char [] carr = char baru [4]; sbuilder.getchars (3, 7, carr, 0); untuk (int i = 0; i <carr.length; i ++) system.out.printf ("carr [%d] =%c", i, carr [i]); System.out.println (); System.out.println (); } / *** StringBuffer 中 Indeks 相关 API 演示* / private static void testIndExapis () {System.out.println ("-------------------------------- TestIndExapis ----------------------------"); StringBuffer sBuilder = StringBuffer baru ("ABCABCABCABCABCABCABCABC"); System.out.printf ("SBuilder =%S/N", SBuilder); // 1. Dari depan ke belakang, temukan lokasi di mana "BC" muncul untuk pertama kalinya System.out.printf (" %-30S = %d/n", "sbuilder.indexof (/" bc/")", sbuilder.indexof ("bc")); // 2. Dari posisi 5, dari depan ke belakang, temukan lokasi di mana "bc" muncul untuk pertama kalinya system.out.printf (" %-30s = %d/n", "sbuilder.indexof (/" bc/", 5)", sbuilder.indexof ("bc", 5)); // 3. Dari belakang ke depan, temukan lokasi di mana "BC" muncul untuk pertama kalinya System.out.printf (" %-30S = %d/n", "sbuilder.lastindexof (/" bc/")", sbuilder.lastindexof ("bc")); // 4. Dari belakang ke depan, temukan lokasi di mana "BC" muncul untuk pertama kalinya System.out.printf (" %-30S = %d/n", "sbuilder.lastindexof (/" bc/", 4)", sbuilder.lastindexof ("bc", 4))); System.out.println (); } / *** StringBuffer 的 ganti () 示例* / private static void testReplaceapis () {System.out.println ("-------------------------------- TestReplaceapis ------------------------------"); StringBuffer Sbuilder; sbuilder = stringBuffer baru ("0123456789"); sbuilder.replace (0, 3, "abcde"); System.out.printf ("SBuilder =%S/N", SBuilder); sbuilder = stringBuffer baru ("0123456789"); sbuilder.reverse (); System.out.printf ("SBuilder =%S/N", SBuilder); sbuilder = stringBuffer baru ("0123456789"); sbuilder.setcharat (0, 'm'); System.out.printf ("SBuilder =%S/N", SBuilder); System.out.println (); } / *** stringBuffer delete () Contoh* / private static void testDeleteapis () { System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Sbuilder.deletecharat (0); str2 = sbuilder.substring (3, 5); System.out.printf ("SBuilder =%S/NSTR1 =%S/NSTR2 =%S/NSTR3 =%S/N", SBUILDER, STR1, STR2, STR3); System.out.println (); } / *** insert () Contoh stringBuffer* / private static void testInsertapis () { System.out.println ("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 0 mewakili posisi awal dari array karakter, 3 mewakili panjang sbuilder Sbuilder.insert (0, true); // masukkan int sbuilder.insert (0, 100); // masukkan long sbuilder.insert (0, 12345L); // Masukkan objek StringBuilder sbuilder.insert (0, stringBuffer baru ("StringBuilder")); // Masukkan objek StringBuilder pada posisi 0. 6 mewakili posisi mulai (termasuk) dari objek yang dimasukkan pada posisi 0, 13 adalah posisi akhir (tidak termasuk) sbuilder.insert (0, stringBuffer baru ("StringBuilder"), 6, 13); // Masukkan objek StringBuffer pada posisi 0. sbuilder.insert (0, stringBuffer baru ("StringBuffer")); // Masukkan objek StringBuffer pada posisi 0. 6 mewakili posisi mulai (termasuk) dari objek yang dimasukkan pada posisi 0, 12 adalah posisi akhir (tidak termasuk) sbuilder.insert (0, stringBuffer baru ("StringBuffer"), 6, 12); // Masukkan objek string pada posisi 0. sbuilder.insert (0, "string"); // Masukkan objek string pada posisi 0. 1 mewakili posisi mulai (termasuk) dari objek yang dimasukkan pada posisi 0, 6 adalah posisi akhir (tidak termasuk) sbuilder.insert (0, "0123456789", 1, 6); sbuilder.insert (0, '/n'); // Masukkan objek objek pada posisi 0. 此处以 hashmap 为例 hashmap peta = hashmap baru (); Map.put ("1", "One"); peta.put ("2", "dua"); peta.put ("3", "tiga"); sbuilder.insert (0, peta); System.out.printf ("%s/n/n", sbuilder); } / *** StringBuffer 的 append () 示例* / private static void testAppendapis () {System.out.println ("-------------------------------- TestAppendapis ------------------------------"); StringBuffer sBuilder = StringBuffer baru (); // Tambahkan array karakter sbuilder.append (char baru [] {'a', 'b', 'c', 'd', 'e'}); // Tambahkan array karakter. 0 menunjukkan posisi awal array karakter, 3 menunjukkan panjang sbuilder.append (char baru [] {'a', 'b', 'c', 'd', 'e'}, 0, 3); // tambahkan float sbuilder.append (1.414f); // tambahkan ganda sbuilder.Append (3.14159D); // tambahkan boolean sbuilder.append (true); // tambahkan char sbuilder.append ('/n'); // tambahkan int sbuilder.append (100); // tambahkan long sbuilder.Append (12345L); // Tambahkan Objek StringBuilder SBuilder.Append (StringBuffer baru ("StringBuilder")); // Tambahkan Objek StringBuilder. 6 menunjukkan posisi mulai (termasuk) dari objek yang ditambahkan, 13 adalah posisi akhir (tidak termasuk) sbuilder.Append (StringBuffer baru ("StringBuilder"), 6, 13); // Tambahkan Objek StringBuffer. sbuilder.append (StringBuffer baru ("StringBuffer")); // Tambahkan Objek StringBuffer. 6 menunjukkan posisi mulai (termasuk) dari objek yang ditambahkan, 12 adalah posisi akhir (tidak termasuk) sbuilder.append (stringBuffer baru ("StringBuffer"), 6, 12); // Tambahkan Objek String. sbuilder.append ("string"); // Tambahkan Objek String. 1 menunjukkan posisi mulai (termasuk) dari objek yang ditambahkan, 6 adalah posisi akhir (tidak termasuk) sbuilder.Append ("0123456789", 1, 6); sbuilder.append ('/n'); // Tambahkan objek objek. Di sini kita mengambil hashmap sebagai contoh hashmap peta = hashmap baru (); Map.put ("1", "One"); peta.put ("2", "dua"); peta.put ("3", "tiga"); sbuilder.append (peta); sbuilder.append ('/n'); // Tambahkan UNICODE Encoding SBuilder.AppendCodepoint (0x5B57); // 0x5b57 adalah unicode encoding sbuilder.AppendCodepoint (0x7b26); // 0x7b26 adalah unicode encoding sbuilder.AppendCodepoint (0x7f16); // 0x7f16 adalah Unicode encoding sbuilder.AppendCodepoint (0x7801); // 0x7801 adalah sistem encoding unicode "encoded ".out.printf ("%s/n/n ", sbuilder); }} Hasil Menjalankan:
-------------------------------- testInsertAPIs -------------------------------{3=three, 2=two, 1=one}12345StringBUFFERStringBufferBUILDERStringBuilder12345100true3.141591.414ABCabcde-------------------------------- testAppendAPIs --------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------- SBUILDER = ABCABCABCABCABCABCABCSBUILDER.IndexOf ("BC") = 1SBUILDER.IndexOf ("BC", 5) = 22SBUILDER.LASTINDEXOF ("BC") = 22SBUILDER.------------------------------- -----------SBUILDER ("BC") = 22SBUILDER ("BC") = 22SBUILDER ("BC") = 22SBUILDER. testotherapis -------------------------------- cap = 26c = 6carr [0] = 3 Carr [1] = 4 Carr [2] = 5 Carr [3] = 6