StringBuffer-это безопасная потока, переменная символа. Он наследует от AbstractStringBuilder и реализует интерфейс Char -Sevectence.
StringBuilder также является подклассом, унаследованным от AbstractStringBuilder; Тем не менее, StringBuilder и StringBuffer разные. Первый не является безопасным, а последний-нитью безопасность.
Диаграмма отношений между StringBuffer и CharbeSecence заключается в следующем:
Класс StringBuffer похож на строку и также используется для представления строк. Однако, поскольку внутренняя реализация StringBuffer отличается от String, 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 S = (StringBuffer) "ABC"; // нет никаких отношений наследования, и невозможно принудить вращение.
Код для передачи между объектом StringBuffer и объектом String заключается в следующем:
String s = "abc"; stringbuffer sb1 = new StringBuffer ("123"); StringBuffer sb2 = new StringBuffer (s); // Строка конвертируется в StringBufferString S1 = SB1.ToString (); // stringbuffer преобразовать в строку 1. Список функций STRINGBUFFER
StringBuffer()StringBuffer(int capacity)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 append(char ch)synchronized StringBuffer append(char[] 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)synchronized void getChars(int start, int end, char[] buffer, int idx)synchronized int indexOf(String subString, int start)int indexOf(String string)StringBuffer insert(int index, boolean b)StringBuffer insert(int index, int i)StringBuffer insert(int index, long l)StringBuffer insert(int index, float f)StringBuffer insert(int index, double d)synchronized StringBuffer insert(int index, char ch)synchronized StringBuffer insert(int index, char[] chars)synchronized StringBuffer insert(int index, char[] chars, int start, int length)synchronized StringBuffer insert(int index, String string)StringBuffer insert(int index, Object obj) Синхронизированная вставка строкового буфера (int index, charequence s) синхронизированная stringbuffer insert (int index, charequence s, int ind, int end) int antIndexof (строка строка) синхронизированный int astindexof (int indepring, int intep -intep -syncronic int int -indetbest int -syncom int end, строка строка) синхронизированный stringbuffer reverse () синхронизированный void setcharat (int index, char ch) синхронизированный синхронизированный void setlength (int длина) Синхронизированный шарнизированный шарнирный под последовательность (Int Start, int end) Синхронный подстройка строк (int start) Синхронизированный подстройка (int ind).
2. Пример StringBuffer
Исходный код заключается в следующем (stringbuffertest.java):
/*** Демо -программа StringBuffer*/import java.util.hashmap; открытый класс 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); for (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("-------------------------------- 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.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 的 replication () 示例* / private static void 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 () пример* / 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 () Пример stringbuffer* / private static void testinsertapis () { System.out.println("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 0 представляет собой начальную позицию массива символов, 3 представляет собой длину sbuilder.insert (0, new char [] {'a', 'b', 'c', 'd', 'e'}, 0, 3); Sbuilder.insert (0, True); '/n'); // INSERT int sbuilder.insert (0, 100); // вставить long sbuilder.insert (0, 12345L); // вставить объект StringBuilder sbuilder.insert (0, new 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, map); System.out.printf ("%s/n/n", sbuilder); } / *** stringBuffer 的 append () 示例* / private static void testappendApis () {System.out.println ("------------------------------------ TestAppendApis --------------------------------------"); 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); // Приложение float sbuilder.append (1.414f); // Добавление Double sbuilder.append (3.14159d); // Приложение Boolean sbuilder.append (true); // Приложение char sbuilder.append ('/n'); // Приложение int sbuilder.append (100); // Добавление Long Sbuilder.Append (12345L); // Приложение 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 ("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 (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.out.printf («%s/n/n», sbuilder); }} Результаты работы:
-------------------------------- testInsertAPIs -------------------------------{3=three, 2=two, 1=one}12345StringBUFFERStringBufferBUILDERStringBuilder12345100true3.141591.414ABCabcde-------------------------------- testAppendAPIs ------------------------------- ABCDEABC1.4143.14159TRUE10012345StringBuilderBuilderStingBufferBufferString12345 {3 = три, 2 = два, 1 = один} Кодирование символов. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------- SBUILDER = ABCABCABCABCABCABCABCABCSBUILDER.INDEXOF ("BC") = 1SBUILDER.INDEXOF ("BC", 5) = 22SBUILDER.LASTINDEXOF ("BC") = 22SBUILDER.LASTINDEXOF ("bcc", 4 ---------------------- = 4 ----------- Testotherapis -------------------------------- CAP = 26C = 6CARR [0] = 3 CARR [1] = 4 CARR [2] = 5 CARR [3] = 6