0. Pengantar Jenis StringBuilder
Jenis StringBuilder adalah tipe string yang dapat berubah. API tipe StringBuilder pada dasarnya sama dengan API dari tipe StringBuffer. Satu -satunya perbedaan adalah bahwa penggunaan StringBuilder mengasumsikan bahwa itu dalam satu utas. Dengan kata lain, StringBuilder adalah utas-tidak aman. Saat instantiating StringBuilder, biasanya menetapkan ukuran kapasitas secara default, umumnya panjang parameter string +16. StringBuilder mewarisi kelas abstrak AbstractStringBuilder, dan kelas abstrak diimplementasikan secara internal menggunakan array karakter, dan array dapat diperluas secara dinamis. Metode umum yang disediakan oleh kelas StringBuilder termasuk append (), insert (), ganti (), deleteCharat (), indexOf (), reverse (), tostring () dan metode lain, yang dapat mewujudkan fungsi dasar seperti menambahkan, menghapus, memodifikasi, dan mencari string.
Paket date0812.demo1; test kelas publik3 {public static void main (string [] args) {stringBuilder stringBuilder = new stringBuilder ("eclipse"); // Tambahkan StringBuilder = StringBuilder.append ("Software"); // kapasitas int c = stringBuilder.capacity (); // flip stringBuilder = stringBuilder.reverse (); System.out.println (c); System.out.println (StringBuilder); }} Hasil Menjalankan:
23erawtfos Espilce
1. Metode StringBuilder
StringBuilder adalah urutan karakter variabel. Ini mewarisi dari AbstractStringBuilder dan mengimplementasikan antarmuka charsequence.
StringBuffer juga merupakan subkelas yang diwarisi dari AbstractStringBuilder; Namun, StringBuilder dan StringBuffer berbeda. Yang pertama tidak aman, sedangkan yang terakhir aman.
Diagram hubungan antara StringBuilder dan Charsequence adalah sebagai berikut:
Daftar Metode StringBuilder:
StringBuilder () StringBuilder (int kapasitas) StringBuilder (CharSequence Seq) StringBuilder (String str) StringBuilder Apend (float f) StringBuilder Apend (Double D) StringBuilder Append (Long LongB) StringBuilder Append (int i) StringBuilder Apend (long ling L) StringBuilder Append (int i) StringBuilder Apend (long ling l) StringBuilder Append (int i) StringBuilder append (long lo) StringBuilder chars) stringBuilder append (char [] str, int offset, int len) stringBuilder append (string str) stringBuilder append (objek obj) stringBuil append (stringBuffer sb) stringbuilder append (charsequence csq) stringbuilder append (charsequence csq, start start, charsequence csq) stringbuilder append (charsequence csq, start, start, charsequence csq) stringBuilder append (charsequence csq, start, inter endsq) stringbuilder append (charsequence csq, start, inter endsq) stringbuilder append (charsequence csq, start, interpend capacity()char charAt(int index)int codePointAt(int index)int codePointBefore(int index)int codePointCount(int start, int end)StringBuilder delete(int start, int end)StringBuilder deleteCharAt(int index)void ensureCapacity(int min)void getChars(int start, int end, char[] dst, int dstStart)int indexOf(String subString, int start)int indexOf(String string)StringBuilder insert(int offset, boolean b)StringBuilder insert(int offset, int i)StringBuilder insert(int offset, long l)StringBuilder insert(int offset, float f)StringBuilder insert(int offset, double d)StringBuilder insert(int offset, char c)StringBuilder insert(int offset, char[] ch)StringBuilder insert(int offset, char[] str, int strOffset, int strLen)StringBuilder insert(int offset, String str)StringBuilder insert(int offset, Object obj)StringBuilder insert(int offset, CharSequence s)StringBuilder insert(int offset, CharSequence s, int start, int end)int lastIndexOf(String string)int lastIndexOf(String subString, int start)int length()int offsetByCodePoints(int index, int codePointOffset)StringBuilder replace(int start, int end, String string)StringBuilder reverse()void setCharAt(int index, char ch)void setLength(int length)CharSequence subSequence(int start, int end)String substring(int start)String substring(int start, int end)String toString()void trimToSize()
Karena kode sumber AbstractStringBuilder dan StringBuilder terlalu lama, kode sumber tidak akan terdaftar di sini. Pembaca yang tertarik dapat mempelajarinya sendiri.
2. Kode Uji API StringBuilder
2.1 Sisipkan (masukkan) API Terkait di StringBuilder
Kode sumber adalah sebagai berikut (StringBuilderInsertTest.java):
/** * StringBuilder 的 insert () 示例 * * @Author Skywang */impor java.util.hashmap; kelas publik StringBuilderInsertest {public static void main (string [] args) {testInsertapis (); } / *** StringBuilder 的 insert () 示例* / private static void testInserTapis () {System.out.println ("-------------------------------- TestInserTapis ---------------------------"); StringBuilder sBuilder = stringBuilder baru (); // Masukkan array karakter pada posisi 0 sbuilder.insert (0, char baru [] {'a', 'b', 'c', 'd', 'e'}); // Masukkan array karakter pada posisi 0. 0 mewakili posisi awal array karakter, 3 mewakili panjang sbuilder.insert (0, char baru [] {'a', 'b', 'c', 'd', 'e'}, 0, 3); // masukkan float sbuilder.insert (0, 1.414f); // masukkan ganda sbuilder.insert (0, 3.14159d); // masukkan boolean sbuilder.insert (0, true); // masukkan char sbuilder.insert (0, '/n'); // masukkan int sbuilder.insert (0, 100); // masukkan long sbuilder.insert (0, 14159d); // masukkan boolean sbuilder.insert (0, true); // masukkan char sbuilder.insert (0, '/n'); // masukkan int sbuilder.insert (0, 100); // masukkan long sbuilder.insert (0, 12345L); // masukkan objek StringBuilder sbuilder.insert (0, stringBuilder 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, stringBuilder 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. Di sini kita mengambil hashmap sebagai contoh 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); }} Hasil Menjalankan:
---------------------
2.2 append (append) API Terkait di StringBuilder
Kode sumber adalah sebagai berikut (StringBuilderAppendTest.java):
/** * StringBuilder 的 append () 示例 * * @Author Skywang */impor java.util.hashmap; kelas publik StringBuilderAppendTest {public static void main (string [] args) {testappendapis (); } / *** StringBuilder 的 append () 示例* / private static void testappendapis () {System.out.println ("-------------------------------- TestAppendapis ---------------------------"); StringBuilder sBuilder = stringBuilder 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 (StringBuilder baru ("StringBuilder")); // Tambahkan Objek StringBuilder. 6 menunjukkan posisi mulai (termasuk) dari objek yang ditambahkan, 13 adalah posisi akhir (tidak termasuk) sbuilder.append (stringBuilder baru ("StringBuilder"), 6, 13); // Tambahkan Objek StringBuffer. sbuilder.append (StringBuffer baru ("StringBuffer")); // Tambahkan Objek StringBuffer. 6 menunjukkan posisi awal (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:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.3 Ganti API Terkait di StringBuilder
Kode sumber adalah sebagai berikut (StringBuilderReplacetest.java):
/** * StringBuilder 的 REPLACE () 示例 * * @Author Skywang */impor java.util.hashmap; kelas publik StringBuilderReplacetest {public static void main (string [] args) {testRepLaceapis (); } / *** StringBuilder 的 ganti () 示例* / private static void testReplaceapis () {System.out.println ("----------------------------- testReplaceapis ------------------------------"); StringBuilder Sbuilder; sbuilder = stringBuilder baru ("0123456789"); sbuilder.replace (0, 3, "abcde"); System.out.printf ("SBuilder =%S/N", SBuilder); sbuilder = stringBuilder baru ("0123456789"); sbuilder.reverse (); System.out.printf ("SBuilder =%S/N", SBuilder); sbuilder = stringBuilder baru ("0123456789"); sbuilder.setcharat (0, 'm'); System.out.printf ("SBuilder =%S/N", SBuilder); System.out.println (); }} Hasil Menjalankan:
-------------------------------- TestReplaceapis ------------------------------ SBUILDER = ABCDE3456789SBUILDER = 9876543210SBUILDER = M123456789
2.4 Hapus (Hapus) API Terkait di StringBuilder
Kode sumber adalah sebagai berikut (StringBuilderdeleteTest.java):
/** * StringBuilder 的 delete () 示例 * * @Author Skywang */impor java.util.hashmap; kelas publik StringBuilderdeletetest {public static void main (string [] args) {testdeleteapis (); } / *** StringBuilder 的 delete () 示例* / private static void testDeleteapis () {System.out.println ("-------------------------------- TestDeleteapis ---------------------------"); StringBuilder SBuilder = StringBuilder baru ("0123456789"); // Hapus karakter pada posisi 0, karakter yang tersisa adalah "123456789". sbuilder.deletecharat (0); // Hapus karakter antara posisi 3 (termasuk) dan posisi 6 (tidak termasuk), dan karakter yang tersisa adalah "123789". sbuilder.delete (3,6); // Dapatkan string mulai dari posisi 1 dalam string SB str1 = sbuilder.substring (1); // Dapatkan string dari posisi 3 (termasuk) ke posisi 5 (tidak termasuk) dalam string SB str2 = sbuilder.substring (3, 5); // Dapatkan string dari posisi 3 (termasuk) ke posisi 5 (tidak termasuk) dalam string SB str3 = (string) sbuilder.subequence (3, 5); System.out.printf ("SBuilder =%S/NSTR1 =%S/NSTR2 =%S/NSTR3 =%S/N", SBUILDER, STR1, STR2, STR3); }} Hasil Menjalankan:
-------------------------------- TestDeleteapis ------------------------------- SBUILDER = 123789STR1 = 23789STR2 = 78STR3 = 78
2.5 API terkait indeks di StringBuilder
Kode sumber adalah sebagai berikut (StringBuilderIndextest.java):
/** * Demonstrasi API terkait indeks di StringBuilder * * @Author Skywang */impor java.util.hashmap; kelas publik StringBuilderIndextest {public static void main (string [] args) {testIndexapis (); } / *** Demonstrasi API terkait indeks di StringBuilder* / private static void testIndexapis () { System.out.println ("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- New StringBuilder ("ABCABCABCABCABCABCABCABC"); sbuilder.indexof ("bc")); "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 (); }} Hasil Menjalankan:
-------------------------------- TestIndexapis ------------------------------------ SBUILDER = ABCABCABCABCABCABCABCSBUILDER.IndexOf ("BC") = 1Sbuilder.indexof ("BC", 5) = 22Sbuilder.Lastindexofof 22sbuilder.LastIndexof ("bc", 4) = 4 2.6 StringBuilder Sisa API
Kode sumber adalah sebagai berikut (StringBuilderotheTest.java):
/** * Contoh API lain dari StringBuilder * * @author Skywang */impor java.util.hashmap; kelas publik stringBuilderotherTest {public static void main (string [] args) {testotherapis (); } / *** Contoh API lain dari StringBuilder* / private static void testotherapis () { System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- StringBuilder (0123456789 "); 0); Hasil Menjalankan:
-------------------------------- Testotherapis --------------------------------- CAP = 26C = 6CARR [0] = 3 Carr [1] = 4 Carr [2] = 5 Carr [3] = 6
3. StringBuilder Contoh Lengkap
Contoh berikut adalah program demonstrasi StringBuilder lengkap yang mengintegrasikan contoh -contoh di atas. Kode sumber adalah sebagai berikut (StringBuilderTest.java):
/** * Program Demo StringBuilder * * @author Skywang */impor java.util.hashmap; kelas publik stringBuilderTest {public static void main (string [] args) {testotherapis (); testIndexapis (); testinsertapis (); testappendapis (); testReplaceapis (); testDeleteapis (); } / *** Contoh API lain dari StringBuilder* / private static void testotherapis () {System.out.println ("-------------------------------- Testotherapis --------------------------------"); StringBuilder SBuilder = StringBuilder 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 (); } / *** StringBuilder 中 Indeks 相关 API 演示* / private static void testIndexapis () {System.out.println ("----------------------------- TestIndexapis ----------------------------"); StringBuilder sBuilder = StringBuilder 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 (); } / *** StringBuilder 的 ganti () 示例* / private static void testReplaceapis () {System.out.println ("----------------------------- testReplaceapis ------------------------------"); StringBuilder Sbuilder; sbuilder = stringBuilder baru ("0123456789"); sbuilder.replace (0, 3, "abcde"); System.out.printf ("SBuilder =%S/N", SBuilder); sbuilder = stringBuilder baru ("0123456789"); sbuilder.reverse (); System.out.printf ("SBuilder =%S/N", SBuilder); sbuilder = stringBuilder baru ("0123456789"); sbuilder.setcharat (0, 'm'); System.out.printf ("SBuilder =%S/N", SBuilder); System.out.println (); } / *** stringBuilder 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); } / *** StringBuilder Insert () Contoh* / private static void testInserTapis () { System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 0 mewakili posisi awal dari array karakter, 3 mewakili panjang sbuilder sbuilder.insert (0, true); // masukkan char sbuilder.insert (0, '/n'); // masukkan int sbuilder.insert (0, 100); // masukkan long sbuilder.insert (0, 12345L); // masukkan objek StringBuilder sbuilder.insert (0, stringBuilder 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, stringBuilder 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); } / *** StringBuilder 的 append () 示例* / private static void testAppendapis () {System.out.println ("-------------------------------- TestAppendapis ------------------------------"); StringBuilder sBuilder = stringBuilder 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 (StringBuilder baru ("StringBuilder")); // Tambahkan Objek StringBuilder. 6 menunjukkan posisi mulai (termasuk) dari objek yang ditambahkan, 13 adalah posisi akhir (tidak termasuk) sbuilder.append (stringBuilder baru ("StringBuilder"), 6, 13); // Tambahkan Objek StringBuffer. sbuilder.append (StringBuffer baru ("StringBuffer")); // Tambahkan Objek StringBuffer. 6 menunjukkan posisi awal (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); }}