StringBuffer เป็นลำดับอักขระตัวแปรที่ปลอดภัย มันสืบทอดมาจาก AbstractStringBuilder และดำเนินการอินเทอร์เฟซ Charsequence
StringBuilder ยังเป็นคลาสย่อยที่สืบทอดมาจาก AbstractStringBuilder; อย่างไรก็ตาม StringBuilder และ StringBuffer นั้นแตกต่างกัน อดีตไม่ปลอดภัยในขณะที่หลังเป็นเธรดที่ปลอดภัย
แผนภาพความสัมพันธ์ระหว่าง StringBuffer และ Charsequence มีดังนี้:
คลาส StringBuffer เป็นเหมือนสตริงและใช้เพื่อแสดงสตริง อย่างไรก็ตามเนื่องจากการใช้งานภายในของ StringBuffer นั้นแตกต่างจาก String StringBuffer ไม่ได้สร้างวัตถุใหม่เมื่อประมวลผลสตริงและดีกว่าคลาสสตริงในการใช้หน่วยความจำ
ดังนั้นเมื่อใช้ในการใช้งานจริงหากคุณมักจะต้องแก้ไขสตริงเช่นการแทรกการลบ ฯลฯ มันเหมาะสมกว่าที่จะใช้สตริงบัฟเฟอร์
มีหลายวิธีในคลาส StringBuffer ที่เหมือนกับคลาสสตริง วิธีการเหล่านี้มีหน้าที่เหมือนกับฟังก์ชั่นในคลาสสตริง
แต่มีหนึ่งในความแตกต่างที่สำคัญที่สุดในการปรับเปลี่ยนแต่ละวัตถุของสตริงบัฟฟ์จะเปลี่ยนวัตถุเองซึ่งเป็นความแตกต่างที่ใหญ่ที่สุดจากคลาสสตริง
นอกจากนี้เนื่องจาก StringBuffer มีความปลอดภัยจากเธรดจึงมีบทพิเศษที่จะแนะนำแนวคิดของเธรดในอนาคตดังนั้นจึงสามารถใช้ในโปรแกรมหลายเธรด แต่ประสิทธิภาพการดำเนินการของโปรแกรมค่อนข้างช้า
0. การเริ่มต้นของวัตถุ StringBuffer
การเริ่มต้นของวัตถุ StringBuffer ไม่เหมือนกับการเริ่มต้นของคลาสสตริง Java จัดเตรียมไวยากรณ์พิเศษและภายใต้สถานการณ์ปกติโดยทั่วไปจะใช้ในการเริ่มต้นโดยใช้ตัวสร้าง
ตัวอย่างเช่น:
StringBuffer S = new StringBuffer ();
วัตถุ StringBuffer ที่เริ่มต้นด้วยวิธีนี้เป็นวัตถุที่ว่างเปล่า
หากคุณต้องการสร้างวัตถุ StringBuffer ที่มีเนื้อหาคุณสามารถใช้:
StringBuffer S = ใหม่ StringBuffer ("ABC"); เนื้อหาของวัตถุ StringBuffer ที่เริ่มต้นด้วยวิธีนี้คือสตริง "ABC"
ควรสังเกตว่า StringBuffer และ String เป็นประเภทที่แตกต่างกันและไม่สามารถโยนได้โดยตรง รหัสต่อไปนี้ผิด:
StringBuffer S = "ABC"; // ประเภทการกำหนดไม่ตรงกับ StringBuffer S = (StringBuffer) "ABC"; // ไม่มีความสัมพันธ์ในการสืบทอดและเป็นไปไม่ได้ที่จะบังคับให้หมุน
รหัสสำหรับการส่งระหว่างวัตถุ StringBuffer และวัตถุสตริงมีดังนี้:
String S = "ABC"; StringBuffer SB1 = ใหม่ StringBuffer ("123"); StringBuffer SB2 = ใหม่ StringBuffer (S); // สตริงแปลงเป็น stringbufferstring s1 = sb1.toString (); // StringBuffer แปลงเป็นสตริง 1. รายการฟังก์ชัน StringBuffer
StringBuffer () StringBuffer (ความจุ int) StringBuffer (String String) StringBuffer (charsequence CS) STRINGBUFFER SUPTEND (BOOLEAN B) STRINGBUFFER SUPTEND (int i) STRINCHUNDER SYNCHUNDIZED SYNCHBUFFER SYNCHBUFFER SYNCHBUFFER SYNCHBUFFER SYNCHBUFFER Chars) การซิงโครไนซ์สตริงบัฟเฟอร์ (char [] chars, int start, ความยาว int) ซิงโครไนซ์สตริงบัฟเฟอร์ผนวก (Object OBJ) การซิงโครไนซ์สตริง Synchronized synchronized synchronized stringbuffer append Stringbuffer append StringBuffer Syclonized stringBuffer appendCodePoint (int codepoint) ความจุ int () charat charat (int index) ซิงโครไนซ์ int codepointat (ดัชนี int) ซิงโครไนซ์ int codepointbefointfore (ดัชนี int) ซิงโครไนซ์ int codepointCount (int artIndEx ensureCapacity (int min) void getchars ที่ซิงโครไนซ์ (int start, int end, char [] buffer, int idx) synchronized int indexof ของ (สตริงย่อยสตริง, int start) index ของสตริง (สตริงสตริง) stringbuffer lond (int index, strings แทรก (ดัชนี int, double d) synchronized stringbuffer แทรก (int index, char ch) ซิงโครไนซ์ stringbuffer แทรก (ดัชนี int, char [] chars) synchronized stringbuffer แทรก (ดัชนี int, char [] chars, int start, int ความยาว) charsequence s) การแทรกสตริงสตริงซิงโครไนซ์ (ดัชนี int, charsequence s, int start, int end) int lastindexof (สตริงสตริง) ซิงโครไนซ์ int lastindexof (สตริงย่อยสตริง, int start) ความยาว int () synchronized int rofteboDepoints (int index reverse () void setcharat (INT ดัชนี int, ถ่าน ch) void setLength (ความยาว int) ซิงโครไนซ์ charsequence ต่อมา (int start, int end) สตริงซิงโครไนซ์แบบซิงโครไนซ์
2. ตัวอย่าง StringBuffer
ซอร์สโค้ดมีดังนี้ (StringBufferTest.java):
/*** โปรแกรมการสาธิต StringBuffer*/นำเข้า java.util.hashmap; คลาสสาธารณะ StringBufferTest {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {testinsertapis (); testappendapis (); Testreplaceapis (); testdeleteapis (); TestIndExapis (); testotherapis (); } / *** ตัวอย่าง API อื่น ๆ ของ StringBuffer* / Void Private Static Void Testotherapis () {System.out.println ("-------------------------------- Testotherapis --------------------------------"); StringBuffer sbuilder = new StringBuffer ("0123456789"); int cap = sbuilder.capacity (); System.out.printf ("cap =%d/n", cap); ถ่าน c = sbuilder.charat (6); System.out.printf ("c =%c/n", c); ถ่าน [] carr = ใหม่ถ่าน [4]; sbuilder.getchars (3, 7, carr, 0); สำหรับ (int i = 0; i <carr.length; i ++) system.out.printf ("carr [%d] =%c", i, carr [i]); System.out.println (); System.out.println (); } / *** stringbuffer 中ดัชนี相关 api 演示* / โมฆะคงที่ส่วนตัว testindexapis () {system.out.println ("---------------------------- TestIndexapis ------------------------------------------------------------------------------------------------------ StringBuffer sbuilder = new StringBuffer ("abcabcabcabcabcabcabcabc"); System.out.printf ("sbuilder =%s/n", sbuilder); // 1. จากด้านหน้าไปด้านหลังค้นหาตำแหน่งที่ "BC" ปรากฏเป็นครั้งแรก System.out.printf (" %-30s = %d/n", "sbuilder.indexof (/" bc/")", sbuilder.indexof ("bc"); // 2. จากตำแหน่งที่ 5 จากด้านหน้าไปด้านหลังค้นหาตำแหน่งที่ "BC" ปรากฏเป็นครั้งแรก System.out.printf (" %-30s = %d/n", "sbuilder.indexof (/" bc/", 5)", sbuilder.indexof ("bc", 5); // 3. จากด้านหลังไปด้านหน้าค้นหาตำแหน่งที่ "BC" ปรากฏขึ้นเป็นครั้งแรก System.out.printf (" %-30s = %d/n", "sbuilder.aslastindexof (/" bc/")", sbuilder.astindexof ("bc"); // 4. จากด้านหน้าไปด้านหน้าค้นหาตำแหน่งที่ "BC" ปรากฏขึ้นเป็นครั้งแรก System.out.printf (" %-30s = %d/n", "sbuilder.aslastindexof (/" bc/", 4)", sbuilder.astindexof ("bc", 4); System.out.println (); } / *** stringbuffer 的แทนที่ () 示例* / โมฆะส่วนตัวคงที่ testreplaceapis () {system.out.println ("---------------------------- Testreplaceapis -------------------------------------------------------------- Stringbuffer sbuilder; sbuilder = new StringBuffer ("0123456789"); sbuilder.replace (0, 3, "abcde"); System.out.printf ("sbuilder =%s/n", sbuilder); sbuilder = new StringBuffer ("0123456789"); sbuilder.reverse (); System.out.printf ("sbuilder =%s/n", sbuilder); sbuilder = new StringBuffer ("0123456789"); sbuilder.setcharat (0, 'm'); System.out.printf ("sbuilder =%s/n", sbuilder); System.out.println (); } / *** StringBuffer DELETE () ตัวอย่าง* / Void 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 (); } / *** แทรก () ตัวอย่างของ StringBuffer* / Void Private Static Void TestInserTapis () { System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 0 หมายถึงตำแหน่งเริ่มต้นของอาร์เรย์ตัวละคร 3 หมายถึงความยาว sbuilder.insert (0, ถ่านใหม่ [] {'a', 'b', 'c', 'd', 'e'}, 0, 3); sbuilder.insert (0, true); '/n'); // แทรก int sbuilder.insert (0, 100); // แทรก sbuilder.insert ยาว (0, 12345L); // แทรกวัตถุ StringBuilder sbuilder.insert (0, StringBuffer ใหม่ ("StringBuilder")); // แทรกวัตถุ StringBuilder ที่ตำแหน่ง 0. 6 หมายถึงตำแหน่งเริ่มต้น (รวม) ของวัตถุที่แทรกที่ตำแหน่ง 0, 13 คือตำแหน่งสิ้นสุด (ไม่รวม) sbuilder.insert (0, สตริงใหม่ ("StringBuilder"), 6, 13); // แทรกวัตถุ StringBuffer ที่ตำแหน่ง 0. SBUILDER.INSERT (0, StringBuffer ใหม่ ("StringBuffer")); // แทรกวัตถุ StringBuffer ที่ตำแหน่ง 0. 6 หมายถึงตำแหน่งเริ่มต้น (รวม) ของวัตถุที่แทรกที่ตำแหน่ง 0, 12 คือตำแหน่งสิ้นสุด (ไม่รวม) sbuilder.insert (0, สตริงใหม่ ("Stringbuffer"), 6, 12); // แทรกวัตถุสตริงที่ตำแหน่ง 0. sbuilder.insert (0, "สตริง"); // แทรกวัตถุสตริงที่ตำแหน่ง 0. 1 หมายถึงตำแหน่งเริ่มต้น (รวม) ของวัตถุที่แทรกที่ตำแหน่ง 0, 6 คือตำแหน่งสุดท้าย (ไม่รวม) sbuilder.insert (0, "0123456789", 1, 6); sbuilder.insert (0, '/n'); // แทรกวัตถุวัตถุที่ตำแหน่ง 0 此处以 hashmap 为例 Hashmap Map = ใหม่ hashmap (); map.put ("1", "หนึ่ง"); map.put ("2", "สอง"); map.put ("3", "สาม"); sbuilder.insert (0, แผนที่); System.out.printf ("%s/n/n", sbuilder); } / *** StringBuffer 的ผนวก () 示例* / Void Private Static Void Testappendapis () {System.out.println ("---------------------------- Testappendapis -------------------------------------------------------------------------------------- StringBuffer sbuilder = new StringBuffer (); // ผนวกอักขระอาร์เรย์ sbuilder.append (ถ่านใหม่ [] {'a', 'b', 'c', 'd', 'e'}); // ต่อท้ายอาร์เรย์อักขระ 0 ระบุตำแหน่งเริ่มต้นของอาร์เรย์อักขระ 3 หมายถึงความยาว sbuilder.append (ถ่านใหม่ [] {'a', 'b', 'c', 'd', 'e'}, 0, 3); // ผนวกลอย sbuilder.append (1.414f); // ผนวกสอง sbuilder.append (3.14159d); // ผนวกบูลีน sbuilder.append (จริง); // ผนวกถ่าน sbuilder.append ('/n'); // ผนวก int sbuilder.append (100); // ผนวก Sbuilder Long Long (12345L); // ผนวกวัตถุสตริง builder sbuilder.append (สตริงใหม่ ("stringbuilder")); // ผนวกวัตถุ StringBuilder 6 ระบุตำแหน่งเริ่มต้น (รวมถึง) ของวัตถุต่อท้าย, 13 คือตำแหน่งสิ้นสุด (ไม่รวม) sbuilder.append (สตริงใหม่ ("StringBuilder"), 6, 13); // ต่อท้ายวัตถุ StringBuffer sbuilder.append (Stringbuffer ใหม่ ("StringBuffer")); // ต่อท้ายวัตถุ StringBuffer 6 ระบุตำแหน่งเริ่มต้น (รวมถึง) ของวัตถุต่อท้าย, 12 คือตำแหน่งสิ้นสุด (ไม่รวม) sbuilder.append (สตริงใหม่ ("Stringbuffer"), 6, 12); // ผนวกวัตถุสตริง sbuilder.append ("String"); // ผนวกวัตถุสตริง 1 ระบุตำแหน่งเริ่มต้น (รวมถึง) ของวัตถุต่อท้าย, 6 คือตำแหน่งสิ้นสุด (ไม่รวม) sbuilder.append ("0123456789", 1, 6); sbuilder.append ('/n'); // ผนวกวัตถุวัตถุ ที่นี่เราใช้ hashmap เป็นตัวอย่าง hashmap map = new hashmap (); map.put ("1", "หนึ่ง"); map.put ("2", "สอง"); map.put ("3", "สาม"); sbuilder.append (แผนที่); sbuilder.append ('/n'); // ผนวกการเข้ารหัส Unicode Sbuilder.AppendCodePoint (0x5b57); // 0x5b57 เป็น unicode encoding sbuilder.appendcodepoint (0x7b26); // 0x7b26 เป็น unicode encoding sbuilder.appendcodepoint (0x7f16); // 0x7f16 เป็น "เข้ารหัส" unicode encoding sbuilder.appendCodePoint (0x7801); // 0x7801 เป็น "เข้ารหัส" unicode encoding system.out.printf ("%s/n/n", sbuilder); - ผลการทำงาน:
---------------------------- TestInsertapis ------------------------------- {3 = สาม, 2 = สอง, 1 = หนึ่ง} 12345StringBufferStringBufferBuildERStringBuilder12345100TRUE3.141591 --------------------------- ABCDEABC1.4143.14159TRUE10012345STRINGBUILDERBUILDERSTRINGBUFFERBUFFERSTRING12345 {3 = สาม, 2 = สอง, 1 = หนึ่ง} การเข้ารหัสตัวละคร - - ---------------------------- sbuilder = abcabcabcabcabcabcabcabcsbuilder.indexof ("bc") = 1sbuilder.indexof ("bc", 5) = 22sbuilder.lastindexof ("bc") = 22sbuilder.lastindexof testotherapis ---------------------------- cap = 26c = 6carr [0] = 3 carr [1] = 4 carr [2] = 5 carr [3] = 6