0. Einführung in den StringBuilder -Typ
Der StringBuilder -Typ ist ein veränderlicher String -Typ. Die API des StringBuilder -Typs entspricht im Grunde genommen mit der API des StringBuffer -Typs. Der einzige Unterschied besteht darin, dass die Verwendung von StringBuilder annimmt, dass sie sich in einem einzelnen Thread befindet. Mit anderen Worten, StringBuilder ist Thread-Iscure. Bei der Instanziierung von StringBuilder wird normalerweise standardmäßig eine Kapazitätsgröße festgelegt, im Allgemeinen die Länge des String -Parameters +16. StringBuilder erbt den abstrakten AbstractStringBuilder der abstrakten Klasse, und die abstrakte Klasse wird intern unter Verwendung von Charakter -Arrays implementiert, und das Array kann dynamisch erweitert werden. Gemeinsame Methoden der StringBuilder -Klasse umfassen append (), insert (), ersatz (), deletecharat (), indexof (), reverse (), toString () und andere Methoden, die grundlegende Funktionen wie das Hinzufügen, Löschen, Ändern und Durchsuchen von Strings realisieren können.
Paket Datum0812.demo1; public class test3 {public static void main (String [] args) {StringBuilder StringBuilder = new StringBuilder ("Eclipse"); // StringBuilder = StringBuilder.Append ("Software") hinzufügen; // Kapazität int c = StringBuilder.Capacity (); // Flip StringBuilder = StringBuilder.Reverse (); System.out.println (c); System.out.println (StringBuilder); }} Auslaufergebnisse:
23erawtfos espilce
1. StringBuilder -Methode
StringBuilder ist eine variable Zeichensequenz. Es erbt von AbstractStringBuilder und implementiert die Charsequence -Schnittstelle.
StringBuffer 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 StringBuilder und Charsequence lautet wie folgt:
Liste der StringBuilder -Methoden:
StringBuilder()StringBuilder(int capacity)StringBuilder(CharSequence seq)StringBuilder(String str)StringBuilder append(float f)StringBuilder append(double d)StringBuilder append(boolean b)StringBuilder append(int i)StringBuilder append(long l)StringBuilder append(char c)StringBuilder append(char[] chars)StringBuilder append(char[] str, int offset, int len)StringBuilder append(String str)StringBuilder append(Object obj)StringBuilder append(StringBuffer sb)StringBuilder append(CharSequence csq)StringBuilder append(CharSequence csq, int start, int end)StringBuilder appendCodePoint(int codePoint)int 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 -Seecapacity (int min) void getChars (int start, int start, int end, char [] dst, intstart) int intart (String substring, int start) intstart, int start) 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 länge) charsequence subsequence (int start, int end) String -Substring (int start) String -Substring (int start, int End) String toString () void trimToSize ()
Da der Quellcode von AbstractStringBuilder und StringBuilder zu lang ist, wird der Quellcode hier nicht aufgeführt. Interessierte Leser können es selbst studieren.
2. StringBuilder -API -Testcode
2.1 Einfügen (einfügen) verwandte API in StringBuilder
Der Quellcode ist wie folgt (StringBuilderInsertTest.java):
/** * StringBuilder 的 insert () 示例 * * @author Skywang */import Java.util.hashMap; öffentliche Klasse StringBuilderInStest {public static void main (String [] args) {TestInsertapis (); } / *** StringBuilder 的 insert () 示例* / private statische void testinsertapis () {System.out.println ("---------------------------- TestInsertapis -----------------------------------"); StringBuilder sbuilder = new StringBuilder (); // das Zeichenarray an Position 0 sbuilder.insert (0, neu [] {'a', 'b', 'c', 'd', 'e'}) einfügen; // Einfügen das Zeichenarray an Position 0. 0 Die Ausgangsposition des Zeichenarrays darstellt, 3 repräsentiert die Länge sbuilder.insert (0, neu [] {'A', 'B', 'C', 'D', 'E'}, 0, 3); // Float sbuilder.insert (0, 1.414f) einfügen; // Double sbuilder.insert (0, 3.14159d) einfügen; // boolean sbuilder.insert (0, true) einfügen; // char sbuilder.insert (0, '/n') einfügen; // Int sbuilder.insert (0, 100) einfügen; // Long sbuilder.insert (0, 14159d) einfügen; // boolean sbuilder.insert (0, true) einfügen; // char sbuilder.insert (0, '/n') einfügen; // Int sbuilder.insert (0, 100) einfügen; // Long sbuilder.insert (0, 12345L) einfügen; // das StringBuilder -Objekt sbuilder.insert (0, neuer StringBuilder ("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. Hier nehmen wir HashMap als Beispiel 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); }} Auslaufergebnisse:
-------------------------------- TestInsertapis ---------------------------
2.2 APIs anhängen (anhängen) in StringBuilder
Der Quellcode ist wie folgt (StringBuilderAppendest.java):
/** * StringBuilder 的 append () 示例 * * @author Skywang */import Java.util.hashMap; öffentliche Klasse StringBuilderAppendTest {public static void main (String [] args) {testAppendapis (); } / *** StringBuilder 的 append () 示例* / private static void testAppendapis () {System.out.println ("---------------------------- testAppendapis ------------------------------------ StringBuilder sbuilder = new StringBuilder (); // 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 StringBuilder ("StringBuilder")); // StringBuilder -Objekt anhängen. 6 gibt die Startposition (einschließlich) des angehängten Objekts an, 13 ist die Endposition (mit Ausnahme) sbuilder.Append (neuer StringBuilder ("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:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.3 Ersetzen Sie verwandte APIs in StringBuilder
Der Quellcode lautet wie folgt (StringBuilderReplacetest.java):
/** * StringBuilder 的 ersetzen () 示例 * * @author Skywang */import Java.util.hashMap; öffentliche Klasse StringBuilderReplacetest {public static void main (String [] args) {testreplaceapis (); } / *** StringBuilder 的 ersetzen () 示例* / private statische void testreplaceapis () {System.out.println ("---------------------------- testreplaceapis ---------------------------------------------------------------------------------- StringBuilder Sbuilder; sbuilder = new StringBuilder ("0123456789"); sbuilder.replace (0, 3, "abcde"); System.out.printf ("sbuilder =%s/n", sbuilder); sbuilder = new StringBuilder ("0123456789"); sbuilder.reverse (); System.out.printf ("sbuilder =%s/n", sbuilder); sbuilder = new StringBuilder ("0123456789"); sbuilder.setcharat (0, 'm'); System.out.printf ("sbuilder =%s/n", sbuilder); System.out.println (); }} Auslaufergebnisse:
-------------------------------- Testreplaceapis ------------------------------ SBUILDER = ABCDE3456789SBUILDER = 9876543210SBuilder = M123456789
2.4 verwandte API in StringBuilder löschen (löschen)
Der Quellcode lautet wie folgt (StringBuilderDeletetest.java):
/** * StringBuilder 的 delete () 示例 * * @author Skywang */import Java.util.hashMap; öffentliche Klasse StringBuilderDeletEtest {public static void main (String [] args) {testEleletapis (); } / *** StringBuilder 的 delete () 示例* / private static void testDeletapis () {System.out.println ("---------------------------- testDeletapis ------------------------------------ StringBuilder sbuilder = new StringBuilder ("0123456789"); // Löschen Sie das Zeichen an Position 0, das verbleibende Zeichen lautet "123456789". sbuilder.deletecharat (0); // Zeichen zwischen Position 3 (einschließlich) und Position 6 (ausgenommen) und die verbleibenden Zeichen sind "123789". sbuilder.delete (3,6); // die Zeichenfolge ab Position 1 in SB String str1 = sbuilder.substring (1) abrufen; // Die Zeichenfolge von Position 3 (einschließlich) in Position 5 (ausgenommen) in SB String str2 = sbuilder.substring (3, 5) erhalten; // Die Zeichenfolge von Position 3 (einschließlich) in Position 5 (ausgenommen) in SB String str3 = (String) sbuilder.SubSequence (3, 5) erhalten; System.out.printf ("sbuilder =%s/nstr1 =%s/nstr2 =%s/nstr3 =%s/n", SBuilder, str1, str2, str3); }} Auslaufergebnisse:
-------------------------------- TestDeletapis -------------------------------
2.5 indexbezogene API in StringBuilder
Der Quellcode lautet wie folgt (StringBuilderIndextest.java):
/** * Indexbezogene API-Demonstration in StringBuilder * * @Author Skywang */import Java.util.hashMap; öffentliche Klasse StringBuilderIndextest {public static void main (String [] args) {testIndexapis (); } / *** Indexbezogene API-Demonstration in StringBuilder* / privat static void testIndexapis () { System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- StringBuilder ("abcabcabcabcabcabcabc"); sbuilder.indexof ("bc")); erscheint erstmals system.out.printf (" %-30S = %d/n", "sbuilder.lastindexof (/" bc/")", sbuilder.lastindexof ("bc")); // 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 (); }} Auslaufergebnisse:
-------------------------------- testIndexAPIs --------------------------------sbuilder=abcAbcABCabCaBcAbCaBCabcsbuilder.indexOf("bc") = 1sbuilder.indexOf("bc", 5) = 22sbuilder.lastIndexOf("bc") = 22sbuilder.lastIndexOf("bc", 4) = 4 2.6 StringBuilder verbleibende API
Der Quellcode lautet wie folgt (StringBuilderotherTest.java):
/** * Andere API -Beispiele für StringBuilder * * @Author Skywang */import Java.util.hashMap; öffentliche Klasse StringBuilderotherTest {public static void main (String [] args) {testotherapis (); } / *** Andere API -Beispiele für StringBuilder* / private statische void testotherapis () { System.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- StringBuilder("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 < Auslaufergebnisse:
-------------------------------- testotherapis -------------------------------- cap = 26C = 6Carr [0] = 3 CAR [1] = 4 CAR [2] = 5 CAR [3] = 6
3.. StringBuilder vollständiges Beispiel
Das folgende Beispiel ist ein vollständiges StringBuilder -Demonstrationsprogramm, das die obigen Beispiele integriert. Der Quellcode lautet wie folgt (StringBuilderTest.java):
/** * StringBuilder Demo -Programm * * @Author Skywang */import Java.util.hashMap; public class StringBuilderTest {public static void main (String [] args) {Testotherapis (); testIndexapis (); testinsertapis (); testAppendapis (); testreplaceapis (); testDeletapis (); } / *** Andere API-Beispiele für StringBuilder* / private statische void testotherapis () {System.out.println ("----------------------------------------------------------------------------"); StringBuilder sbuilder = new StringBuilder ("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 (); } / *** StringBuilder 中 index 相关 api 演示* / private static void testIndexapis () {System.out.println ("---------------------------- testIndexapis ----------------------------------------"); StringBuilder sbuilder = new StringBuilder ("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 (); } / *** StringBuilder 的 ersetzen () 示例* / private statische void testreplaceapis () {System.out.println ("---------------------------- testreplaceapis ---------------------------------------------------------------------------------- StringBuilder Sbuilder; sbuilder = new StringBuilder ("0123456789"); sbuilder.replace (0, 3, "abcde"); System.out.printf ("sbuilder =%s/n", sbuilder); sbuilder = new StringBuilder ("0123456789"); sbuilder.reverse (); System.out.printf ("sbuilder =%s/n", sbuilder); sbuilder = new StringBuilder ("0123456789"); sbuilder.setcharat (0, 'm'); System.out.printf ("sbuilder =%s/n", sbuilder); System.out.println (); } / *** StringBuilder 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); } / *** StringBuilder Insert () Beispiel* / 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); // char sbuilder.insert (0, '/n') einfügen; // Int sbuilder.insert (0, 100) einfügen; // Long sbuilder.insert (0, 12345L) einfügen; // das StringBuilder -Objekt sbuilder.insert (0, neuer StringBuilder ("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); } / *** StringBuilder 的 append () 示例* / private static void testAppendapis () {System.out.println ("---------------------------- testAppendapis ----------------------------------"); StringBuilder sbuilder = new StringBuilder (); // 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 StringBuilder ("StringBuilder")); // StringBuilder -Objekt anhängen. 6 gibt die Startposition (einschließlich) des angehängten Objekts an, 13 ist die Endposition (mit Ausnahme) sbuilder.Append (neuer StringBuilder ("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); }}