StringBuffer ist eine thread-sichere, variable Zeichensequenz. Es erbt von AbstractStringBuilder und implementiert die Charsequence -Schnittstelle.
StringBuilder ist auch eine von AbstractStringBuilder geerbte Unterklasse; StringBuilder und StringBuffer sind jedoch unterschiedlich. Ersteres ist nicht threadssicher, während letzteres fadensicher ist.
Das Beziehungsdiagramm zwischen StringBuffer und Charsequence lautet wie folgt:
Die StringBuffer -Klasse ist wie Zeichenfolge und wird auch zur Darstellung von Zeichenfolgen verwendet. Da sich die interne Implementierung von StringBuffer von String unterscheidet, generiert StringBuffer bei der Verarbeitung von Zeichenfolgen keine neuen Objekte und ist in der Speicherverwendung besser als String -Klasse.
Wenn Sie es bei der Verwendung in tatsächlicher Verwendung häufig eine Zeichenfolge wie das Einfügen, Löschen usw. ändern müssen, ist es jedoch besser geeignet, StringBuffer zu verwenden.
Es gibt viele Methoden in der StringBuffer -Klasse, die mit der String -Klasse die gleichen entsprechen. Diese Methoden sind funktional mit den Funktionen in der String -Klasse übereinstimmen.
Es gibt jedoch einen der wichtigsten Unterschiede darin, dass jede Änderung des StringBuffer -Objekts das Objekt selbst verändert, was der größte Unterschied von der String -Klasse ist.
Da StringBuffer, da es sich um Thread-Sicherheit handelt, gibt es spezielle Kapitel, in denen das Konzept der Threads in der Zukunft eingeführt wird, sodass es auch in Multi-Thread-Programmen verwendet werden kann, die Ausführungseffizienz des Programms ist jedoch relativ langsam.
0. Initialisierung des StringBuffer -Objekts
Die Initialisierung eines StringBuffer -Objekts ähnelt nicht der Initialisierung einer String -Klasse. Java bietet spezielle Syntax und unter normalen Umständen wird es im Allgemeinen zur Initialisierung von Konstruktoren verwendet.
Zum Beispiel:
StringBuffer s = new StringBuffer ();
Das auf diese Weise initiierte StringBuffer -Objekt ist ein leeres Objekt.
Wenn Sie ein StringBuffer -Objekt mit Inhalten erstellen müssen, können Sie:
StringBuffer s = new StringBuffer ("ABC"); Der initialisierte Inhalt des StringBuffer -Objekts ist die Zeichenfolge "ABC".
Es ist zu beachten, dass StringBuffer und String unterschiedliche Typen sind und nicht direkt gegossen werden können. Der folgende Code ist falsch:
StringBuffer S = "ABC"; // Der Zuordnertyp stimmt nicht mit StringBuffer s = (StringBuffer) "ABC" überein. // Es gibt keine Erbschaftsbeziehung und es ist unmöglich, die Rotation zu erzwingen.
Der Code zum Umwandeln zwischen dem StringBuffer -Objekt und dem String -Objekt lautet wie folgt:
String s = "abc"; StringBuffer SB1 = new StringBuffer ("123"); StringBuffer SB2 = new StringBuffer (s); // String in StringBufferString s1 = sb1.toString () konvertieren; // StringBuffer konvertieren in String 1. STRINGBUFFER -Funktionsliste
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) synchronisierte StringBuffer -Anhänge (char [] chars, int start, int länge) 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) Synchronisierte StringBuffer -Insert (int Index, char ch) Synchronisierte StringBuffer -Insert (int Index, char [] chars) Synchronisierte StringBuffer -Insert (int Index, char [] chars, int start, int länge) 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) Synchronisierte Void -SetLength (int -Länge) Synchronisierte charsequenzielle Subquence (int start, int end)
2. Beispiel für StringBuffer
Der Quellcode ist wie folgt (StringBufferTest.java):
/*** StringBuffer Demo -Programm*/import java.util.hashMap; public class StringBufferTest {public static void main (String [] args) {TestInsertapis (); testAppendapis (); testreplaceapis (); testDeletapis (); testIndexapis (); testotherapis (); } / *** Andere API-Beispiele für StringBuffer* / private statische void testotherapis () {System.out.println ("----------------------------------------------------------------------------"); 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); für (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. von vorne nach hinten finden Sie den Ort, an dem "BC" zum ersten Mal system.out.printf (" %-30S = %d/n", "sbuilder.indexof (/" bc/"), sbuilder.indexof (" bc ") erscheint; // 2. Finden Sie von Position 5 von vorne nach hinten den Ort, an dem "BC" erstmals System erscheint. // 3. Von hinten nach vorne finden Sie den Ort, an dem "BC" zum ersten Mal system.out.printf (" %-30S = %d/n", "sbuilder.lastindexof (/" BC/"), SBuilder.Lastindexof (" BC ") erscheint; // 4. Finden Sie von hinten nach vorne den Ort, an dem "BC" zum ersten Mal system.out.printf (" %-30S = %d/n", "sbuilder.lastindexof (/" BC/", 4)", sbuilder.lastindexof ("BC", 4) erscheint; System.out.println (); } / *** StringBuffer 的 ersetzen () 示例* / private statische 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 () Beispiel* / private statische void testDeletapis () { System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- sbuilder.deletecharat (0); sbuilder.substring (3, 5); System.out.printf ("sbuilder =%s/nstr1 =%s/nstr2 =%s/nstr3 =%s/n", SBuilder, str1, str2, str3); System.out.println (); } / *** insert () Beispiel für StringBuffer* / private statische void testinsertapis () { System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------— 0 repräsentiert die Startposition des Zeichenarrays, 3 repräsentiert die Länge sbuilder (0, neu [] {'A', 'B', 'C', 'D', 'E'}, 0, 3); sbuilder.insert (0, true); // Int sbuilder.insert (0, 100) einfügen; // Long sbuilder.insert (0, 12345L) einfügen; // Das StringBuilder -Objekt sbuilder.insert (0, neuer StringBuffer ("StringBuilder")) einfügen; // Einfügen des StringBuilder -Objekts an Position 0. 6 repräsentiert die Startposition (einschließlich) des an Position 0 eingefügten Objekts. // das StringBuffer -Objekt an Position 0. // Einfügen das StringBuffer -Objekt an Position 0. 6 repräsentiert die Startposition (einschließlich) des an Position 0 eingefügten Objekts, 12 ist die Endposition (mit Ausnahme) sbuilder.insert (0, neuer StringBuffer ("StringBuffer"), 6, 12); // das String -Objekt an Position 0 einfügen. Sbuilder.insert (0, "String"); // Einfügen des String -Objekts an Position 0. 1 repräsentiert die Startposition (einschließlich) des an Position 0 eingefügten Objekts, 6 ist die Endposition (mit Ausnahme) sbuilder.insert (0, "0123456789", 1, 6); sbuilder.insert (0, '/n'); // das Objektobjekt an Position 0 einfügen. 此处以 HashMap 为例 HashMap map = new HashMap (); map.put ("1", "eins"); map.put ("2", "zwei"); map.put ("3", "drei"); 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 (); // Zeichenarray sbuilder.Append append (neu [] {'a', 'b', 'c', 'd', 'e'}); // Charakterarray anhängen. 0 Zeigt die Ausgangsposition des Zeichenarrays an, 3 zeigt die Länge an, die sbuilder.append (neu [] {'a', 'b', 'c', 'd', 'e'}, 0, 3) angibt; // float sbuilder.Append (1.414f) anhängen; // Double sbuilder.Append (3.14159d) anhängen; // boolean sbuilder.Append (true) anhängen; // char sbuilder.append ('/n') anhängen; // Int sbuilder.Append (100) anhängen; // Long sbuilder.Append (12345L) anhängen; // append StringBuilder -Objekt sbuilder.Append (neuer StringBuffer ("StringBuilder")); // StringBuilder -Objekt anhängen. 6 zeigt die Startposition (einschließlich) des angehängten Objekts an, 13 ist die Endposition (mit Ausnahme) sbuilder.Append (neuer StringBuffer ("StringBuilder"), 6, 13); // StringBuffer -Objekt anhängen. sbuilder.Append (neuer StringBuffer ("StringBuffer")); // StringBuffer -Objekt anhängen. 6 zeigt die Startposition (einschließlich) des angehängten Objekts an, 12 ist die Endposition (mit Ausnahme) sbuilder.append (neuer StringBuffer ("StringBuffer"), 6, 12); // String -Objekt anhängen. sbuilder.Append ("String"); // String -Objekt anhängen. 1 gibt die Startposition (einschließlich) des angehängten Objekts an, 6 ist die Endposition (mit Ausnahme) sbuilder.append ("0123456789", 1, 6); sbuilder.append ('/n'); // Objekt anhängen. Hier nehmen wir HashMap als Beispiel hashmap map = new Hashmap (); map.put ("1", "eins"); map.put ("2", "zwei"); map.put ("3", "drei"); sbuilder.Append (map); sbuilder.append ('/n'); // append Unicode codieren sbuilder.appendCodePoint (0x5b57); // 0x5b57 ist der Unicode, der sbuilder.AppendCodePoint (0x7b26) codiert; // 0x7b26 ist der Unicode, der sbuilder.AppendCodePoint (0x7f16) codiert; // 0x7f16 ist das "codierte" Unicode codieren sbuilder.appendCodePoint (0x7801); // 0x7801 ist das "codierte" Unicode -Codierungssystem.out.printf ("%s/n/n", sbuilder); }} Auslaufergebnisse:
-------------------------------- TestInserStapis ------------------------------- --------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------sbuilder=abcAbcABCabCaBcAbCaBCabcsbuilder.indexOf("bc") = 1sbuilder.indexOf("bc", 5) = 22sbuilder.lastIndexOf("bc") = 22sbuilder.lastIndexOf("bc", 4) = 4-------------------------------- testOtherAPIs -------------------------------- cap = 26C = 6Carr [0] = 3 Carr [1] = 4 Carr [2] = 5 Carr [3] = 6