StringBuffer هو تسلسل حرف آمن مؤشر ترابط. يرث من AbstractStringBuilder وينفذ واجهة charsequence.
StringBuilder هي أيضًا فئة فرعية ورثتها من AbstractStringBuilder ؛ ومع ذلك ، فإن StringBuilder و StringBuffer مختلفان. السابق غير آمن ، في حين أن الأخير آمن.
مخطط العلاقة بين StringBuffer و Charsepress هو كما يلي:
فئة StringBuffer تشبه السلسلة وتستخدم أيضًا لتمثيل السلاسل. ومع ذلك ، نظرًا لأن التنفيذ الداخلي لـ StringBuffer يختلف عن السلسلة ، فإن StringBuffer لا يولد كائنات جديدة عند معالجة السلاسل ، وهو أفضل من فئة السلسلة في استخدام الذاكرة.
لذلك ، عند استخدامه في الاستخدام الفعلي ، إذا كنت بحاجة غالبًا إلى تعديل سلسلة ، مثل الإدراج ، والحذف ، وما إلى ذلك ، فهي أكثر ملاءمة لاستخدام StringBuffer.
هناك العديد من الطرق في فئة StringBuffer التي هي نفس فئة السلسلة. هذه الطرق هي نفس الوظائف في فئة السلسلة.
ولكن هناك واحدة من أهم الاختلافات في أن كل تعديل لكائن StringBuffer يغير الكائن نفسه ، وهو الفرق الأكبر من فئة السلسلة.
بالإضافة إلى ذلك ، نظرًا لأن StringBuffer آمن لخيط الخيط ، فهناك فصول خاصة لتقديم مفهوم المواضيع في المستقبل ، بحيث يمكن استخدامها أيضًا في البرامج متعددة الخيوط ، ولكن كفاءة تنفيذ البرنامج بطيئة نسبيًا.
0. تهيئة كائن StringBuffer
تهيئة كائن stringBuffer لا يشبه تهيئة فئة السلسلة. يوفر Java بناء جملة خاص ، وفي ظل الظروف العادية ، يتم استخدامه عمومًا لتهيئته باستخدام المنشآت.
على سبيل المثال:
StringBuffer s = new StringBuffer () ؛
كائن StringBuffer الذي تمت تهيئته بهذه الطريقة هو كائن فارغ.
إذا كنت بحاجة إلى إنشاء كائن StringBuffer مع المحتوى ، فيمكنك استخدام:
StringBuffer s = new StringBuffer ("ABC") ؛ محتوى كائن StringBuffer المهيئة بهذه الطريقة هو السلسلة "ABC".
تجدر الإشارة إلى أن StringBuffer و String أنواع مختلفة ولا يمكن إلقاؤها مباشرة. الرمز التالي خاطئ:
StringBuffer S = "ABC" ؛ // لا يتطابق نوع المهمة // لا توجد علاقة ميراث ومن المستحيل فرض الدوران.
رمز الانتقال بين كائن StringBuffer وكائن السلسلة كما يلي:
String s = "ABC" ؛ StringBuffer SB1 = جديد StringBuffer ("123") ؛ StringBuffer SB2 = New StringBuffer (s) ؛ // string convert to stringBuffersTring S1 = SB1.ToString () ؛ // stringbuffer تحويل إلى سلسلة 1.StringBuffer قائمة وظيفة
StringBuffer () StringBuffer (int cource) StringBuffer (سلسلة السلسلة) StringBuffer (charquence cs) stringbuffer إلحاق (boolean b) chars) stringbuffer stringbuffer متزامن (char [] char ، int start ، int int) stringbuffer synchronized (Object OBJ) stringbuffer synchroniced stringbuffer (سلسلة السلسلة) متزامنة stringbuffer stringbuffer (charbuffer sb) synchronized stringbend ( AppendCodePoint (int codepoint) int courm () char char char (int index) متزامنة متزامنة int codepointat (int index) متزامنة int codepointbefore (int index) synchronized intepointcount (int inting) syncharatized syncharatized syncharatized syncharatized (int) insureCapacity (int min) getChars void void (int start ، int int ، char [] char ، int idx) متزامن int indexof (السلسلة الفرعية ، int) int indexof (سلسلة السلسلة) stringbuffer insert (int index ، int string f) Insert (ind index ، double d) stringbuffer synchronized stringbuffer insert (int index ، char ch) stringBuffer insert (int index ، char [] char) charquence s) متزامن stringbuffer insert (int index ، charsequence s ، int int ، int end) int lastIndexof (سلسلة السلسلة) متزامنة int lastIndexof (سلسلة Sentring ، int start) int int start ، int int int ، int int ، int string ، عكسي () عكسي () setcharat setcharat (int ، int int ، char ch) setlength void setlength (طول int) متزامن إطفاء charsexhence (int start ، int int) السلسلة الفرعية المتزامنة (int start) synchronized string (int start ، int end) متزامن toString ()
2. مثال StringBuffer
رمز المصدر كما يلي (stringBuffertest.java):
/*** stringbuffer demo program*/import java.util.hashMap ؛ public class stringBufferTest {public static void main (string [] args) {testInsertApis () ؛ TestAppendapis () ؛ testreplaceapis () ؛ testDeleteapis () ؛ testIndexapis () ؛ testOTherApis () ؛ } / *** أمثلة API أخرى لـ StringBuffer* / private static void testotherapis () {system.out.println ("-------------------------------- TestOtherapis ---------------------------------- StringBuffer Sbuilder = new StringBuffer ("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 = new Char [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 中 index 相关 api 演示* / private static void testIndexapis () {system.out.println ("------------------------------------------------------------------------------------------------------ StringBuffer sbuilder = new StringBuffer ("AbcabCabCabCabCabCabc") ؛ 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.lastindexof (/" bc/") ، sbuilder.lastindexof (" bc ")) ؛ // 4. من الخلف إلى الأمام ، ابحث عن الموقع الذي يظهر فيه "BC" لأول مرة system.out.printf ("٪-30S = ٪ d/n" ، "sbuilder.lastindexof (/" bc/"، 4)" ، sbuilder.lastindexof ("bc" ، 4)) ؛ system.out.println () ؛ } / *** stringBuffer 的 استبدال () 示例* / private static void testreplaceapis () {system.out.println ("---------------------------------------------------------------------------------------------------------- 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 () مثال* / خاص اختبار الفراغ الثابت System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SBUILDER.DECTINGERAT (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 () مثال على stringbuffer* / private static void testinsertapis () { System.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 0 يمثل موضع البداية لمصفوفة الحرف ، طول Sbuilder Sbuilder.insert (0 ، '/n') ؛ // insert int sbuilder.insert (0 ، 100) ؛ // insert long sbuilder.insert (0 ، 12345l) ؛ // أدخل كائن stringbuilder sbuilder.insert (0 ، stringBuffer جديد ("StringBuilder")) ؛ // أدخل كائن StringBuilder في الموضع 0. 6 يمثل موضع البداية (بما في ذلك) الكائن الذي تم إدخاله في الموضع 0 ، 13 هو الموضع النهائي (باستثناء) sbuilder.insert (0 ، New StringBuffer ("StringBuilder") ، 6 ، 13) ؛ // أدخل كائن StringBuffer في الموضع 0. sbuilder.insert (0 ، new StringBuffer ("StringBuffer")) ؛ // أدخل كائن StringBuffer في الموضع 0. 6 يمثل موضع البداية (بما في ذلك) الكائن الذي تم إدخاله في الموضع 0 ، 12 هو الموضع النهائي (باستثناء) Sbuilder.insert (0 ، New StringBuffer ("StringBuffer") ، 6 ، 12) ؛ // أدخل كائن السلسلة في الموضع 0. sbuilder.insert (0 ، "string") ؛ // أدخل كائن السلسلة في الموضع 0. 1 يمثل موضع البدء (بما في ذلك) الكائن الذي تم إدخاله في الموضع 0 ، 6 هو الموضع النهائي (باستثناء) sbuilder.insert (0 ، "0123456789" ، 1 ، 6) ؛ sbuilder.insert (0 ، '/n') ؛ // أدخل كائن الكائن في الموضع 0. 此处以 hashmap 为例 hashmap map = new hashmap () ؛ map.put ("1" ، "واحد") ؛ map.put ("2" ، "اثنين") ؛ map.put ("3" ، "ثلاثة") ؛ sbuilder.insert (0 ، خريطة) ؛ system.out.printf ("٪ s/n/n" ، sbuilder) ؛ } / *** stringBuffer 的 append () 示例* / private static void testAppendapis () {system.out.println ("---------------------------------------------------------------------------------------------------- StringBuffer sbuilder = new StringBuffer () ؛ // إلحاق حرف الحرف sbuilder.append (new char [] {'a' ، 'b' ، 'c' ، 'd' ، 'e'}) ؛ // إلحاق صفيف حرف. يشير 0 إلى موضع بداية صفيف الأحرف ، 3 يشير إلى طول sbuilder.append (new char [] {'a' ، 'b' ، 'c' ، 'd' ، 'e'} ، 0 ، 3) ؛ // append float sbuilder.append (1.414f) ؛ // إلحاق مزدوج sbuilder.append (3.14159d) ؛ // append boolean sbuilder.append (true) ؛ // append char sbuilder.append ('/n') ؛ // append int sbuilder.append (100) ؛ // إلحاق Long sbuilder.append (12345L) ؛ // append stringBuilder Object sbuilder.append (new StringBuffer ("StringBuilder")) ؛ // إلحاق كائن StringBuilder. 6 يشير إلى أن موضع البداية (بما في ذلك) للكائن الملحق ، 13 هو الموضع النهائي (باستثناء) sbuilder.append (New StringBuffer ("StringBuilder") ، 6 ، 13) ؛ // إلحاق كائن StringBuffer. sbuilder.append (New StringBuffer ("StringBuffer")) ؛ // إلحاق كائن StringBuffer. 6 يشير إلى موضع البداية (بما في ذلك) للكائن الملحق ، 12 هو الموضع النهائي (باستثناء) sbuilder.append (New StringBuffer ("StringBuffer") ، 6 ، 12) ؛ // إلحاق كائن سلسلة. sbuilder.append ("سلسلة") ؛ // إلحاق كائن سلسلة. 1 يشير إلى أن موضع البداية (بما في ذلك) للكائن الملحق ، 6 هو الموضع النهائي (باستثناء) sbuilder.append ("0123456789" ، 1 ، 6) ؛ sbuilder.append ('/n') ؛ // إلحاق كائن كائن. هنا نأخذ hashmap كمثال خريطة hashmap = new hashmap () ؛ map.put ("1" ، "واحد") ؛ map.put ("2" ، "اثنين") ؛ map.put ("3" ، "ثلاثة") ؛ sbuilder.append (MAP) ؛ sbuilder.append ('/n') ؛ // إلحاق Unicode ترميز sbuilder.appendCodePoint (0x5b57) ؛ // 0x5b57 هو Unicode ترميز sbuilder.appendCodePoint (0x7b26) ؛ // 0x7b26 هو Unicode ترميز sbuilder.appendCodePoint (0x7f16) ؛ // 0x7f16 هو "الترميز" Unicode ترميز sbuilder.appendCodePoint (0x7801) ؛ // 0x7801 هو نظام الترميز Unicode "المشفر". }} نتائج التشغيل:
---------------------------------------- TestInsertapis --------------------------------- {3 = three ، 2 = اثنين ، 1 = واحد} 12345stringBufferStringBufferBuilderStringBuilder12345100TRUE3.141591.414ABCABCDE ------------------------------------- ------------------------------- ABCDEABC1.4143.14159TRUE10012345STRINGBUILDERBUILDERSTRINGBUFFERBUFFERSTRING12345 {3 = ثلاثة ، 2 = اثنان ، 1 = واحد} تشفير حرف --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------- Sbuilder = abcabcabcabcabcabcabcsbuilder.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