StringBuffer est une séquence de caractères variable en filetage. Il hérite de AbstractStringBuilder et met en œuvre l'interface CharSequence.
StringBuilder est également une sous-classe héritée de AbstractStringBuilder; Cependant, StringBuilder et StringBuffer sont différents. Le premier est non-sécurisé, tandis que le second est en forme de fil.
Le diagramme relationnel entre StringBuffer et CharSequence est le suivant:
La classe StringBuffer est comme String et est également utilisée pour représenter les chaînes. Cependant, comme l'implémentation interne de StringBuffer est différente de String, StringBuffer ne génère pas de nouveaux objets lors du traitement des chaînes et est meilleure que la classe String dans l'utilisation de la mémoire.
Par conséquent, lorsque vous l'utilisez dans une utilisation réelle, si vous avez souvent besoin de modifier une chaîne, telle que l'insertion, la suppression, etc., il est plus adapté d'utiliser StringBuffer.
Il existe de nombreuses méthodes dans la classe StringBuffer qui sont les mêmes que la classe String. Ces méthodes sont fonctionnellement les mêmes que les fonctions de la classe String.
Mais il existe l'une des différences les plus significatives en ce que chaque modification de l'objet StringBuffer modifie l'objet lui-même, ce qui est la plus grande différence par rapport à la classe de chaîne.
De plus, puisque StringBuffer est thread-safe, il existe des chapitres spéciaux pour introduire le concept de threads à l'avenir, il peut également être utilisé dans des programmes multi-thread, mais l'efficacité d'exécution du programme est relativement lente.
0. Initialisation de l'objet StringBuffer
L'initialisation d'un objet StringBuffer n'est pas comme l'initialisation d'une classe de chaîne. Java fournit une syntaxe spéciale et dans des circonstances normales, il est généralement utilisé pour l'initialiser à l'aide de constructeurs.
Par exemple:
StringBuffer s = new StringBuffer ();
L'objet StringBuffer initialisé de cette manière est un objet vide.
Si vous devez créer un objet StringBuffer avec du contenu, vous pouvez utiliser:
StringBuffer s = new StringBuffer ("ABC"); Le contenu de l'objet StringBuffer initialisé de cette manière est la chaîne "ABC".
Il convient de noter que StringBuffer et String sont différents types et ne peuvent pas être coulés directement. Le code suivant est mauvais:
StringBuffer s = "ABC"; // Le type d'affectation ne correspond pas à StringBuffer S = (StringBuffer) "ABC"; // Il n'y a pas de relation d'héritage et il est impossible de forcer la rotation.
Le code de transmutage entre l'objet StringBuffer et l'objet String est le suivant:
String S = "ABC"; StringBuffer SB1 = new StringBuffer ("123"); StringBuffer SB2 = new StringBuffer (S); // String Convert en stringBufferstring s1 = sb1.toString (); // StringBuffer converti en chaîne 1. Liste des fonctions de StrmingBuffer
StringBuffer () StringBuffer (int la capacité) StringBuffer (String String) StringBuffer (CharSequence CS) StringBuffer APPEND (boolean b) StringBuffer A SPEND (int i) StringBuffer append (Long L) StringBuffer A SPEND (Char Ch) Synchronied StringBuffer Strunbuffer (Char [] Synchronized StringBuffer A SPEND (char Ch) sychronner Synchronied StringBuffer (Char [] Synchronized StringBuffer A SPEND (char Ch) Synchronned Stringbuffer (CHAR [] Synchronized StringBuffer A SPEND (char Ch) Synchronied Stringbuffer StrunBuffer (Char [] CHAR [] STRINGBUFFER APPEND (CHAR CH) SYNCHRE Chars) Synchronisé StringBuffer APPEND (char [] Chars, int start, intylong) synchronisé StringBuffer StringBuffer (objet Obj) Synchronized StringBuffer) APPEND (String String) Synchronisé StringBuffer APPEND (StringBuffer SB) Synchronized StringBuffer A SPEND (CharSequence S) Synchronized StringBuffer Appende APPENDCODEPOINT (int CodePoint) int Capacité () CHARAT CHARAT SYNCHRONISÉ (INT INDEX) synchronisé int CodePointAt (int index) synchronisé int codepointBefore (int index) synchronisé int codepointCount (int débutant, int endIndex) Synchronisé StringBuffer Delete (Int start, int fin) synchronisé stringbuffer Deletecharat (INTLOC Assurecapacité (int min) synchronisé void getChars (int start, int fin, char [] buffer, int idx) synchronisé int index (string substring, int start) int index (string string) stringbuffer insert (int index, boolean b) stringbuffer insert (int index, int i) stringbuffer insert (intde index, long l) stringbuffer insertbuffer (int i) string insert insert (stringbuffer insert insert insert (string inders INSERT (INT INDEX, double D) Insert STRINGBUffer synchronisé (INT INDEX, CHAR CH) INSERT STRANDBUFFER SYNCHRONISE CharSequence S) Insert de stringbuffer synchronisé (int index, charonsence s, int start, int fin) int lastIndexof (String String) synchronisé int lastIndexof (String substring, int start) int length () synchronisé int offSetByCodePoints (int, int, intring string) synchronisé stringbuffer remplace (int start, int fin, string string) synchronis reverse () Synchronisé void setcharat (int index, char ch) synchronisé void setLength (int longueur) subséquence de char à carrésence synchronisée (int start, int fin) substrice de chaîne synchronisée (int start) substriage de chaîne synchronisée (int start, int termin
2. Exemple StringBuffer
Le code source est le suivant (StringBufferSTest.java):
/ ** * StringBuffer Demo Program * / Importer java.util.hashmap; public class stringBufferSt {public static void main (String [] args) {TesInsertapis (); TestAPPEndapis (); TestReplaceapis (); TestDeleTapis (); TestIndexapis (); Testotherapis (); } / ** * Autres exemples d'API de 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 ("-------------------------------- TestingIndexapis ----------------------------"); StringBuffer sbuilder = new StringBuffer ("ABCABCABABABABCABABABABC"); System.out.printf ("sbuilder =% s / n", sbuilder); // 1. De l'avant en arrière, trouvez l'emplacement où "BC" apparaît pour le premier système.out.printf ("% - 30s =% d / n", "sbuilder.indexof (/" bc / ")", sbuilder.indexof ("bc")); // 2. De la position 5, de l'avant en arrière, trouvez l'emplacement où "BC" apparaît pour le premier système.out.printf ("% - 30s =% d / n", "sbuilder.indexof (/" bc / ", 5)", sbuilder.indexof ("bc", 5)); // 3. De l'arrière à l'avant, trouvez l'emplacement où "BC" apparaît pour le premier System.out.printf ("% - 30s =% d / n", "sbuilder.lastIndexof (/" bc / ")", sbuilder.lasteLexof ("bc")); // 4. De l'arrière à l'avant, trouvez l'emplacement où "BC" apparaît pour le premier System.out.printf ("% - 30s =% d / n", "sbuilder.lastindexof (/" bc / ", 4)", sbuilder.lastindexof ("bc", 4)); System.out.println (); } / ** * StringBuffer 的 remplace () 示例 * / 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 () Exemple * / private static void testdeleTeAPIS () { System.out.println ("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Les caractères de la position 3 (y compris) et la position 6 (excluant), et les caractères restants sont "123789". 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 () Exemple de stringbuffer * / private static void testiNsertapis () { System.out.println("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 0 représente la position de départ du tableau des caractères, 3 représente la longueur sbuilder.insert (0, nouveau char [] {'a', 'b', 'c', 'd', 'e'}, 0, 3); sbuilder.insert (0, true); '/ n'); // insérer int sbuilder.insert (0, 100); // insérer long sbuilder.insert (0, 12345l); // insérer l'objet StringBuilder sbuilder.insert (0, new StringBuffer ("stringBuilder")); // insérer l'objet StringBuilder en position 0. 6 représente la position de début (y compris) de l'objet inséré en position 0, 13 est la position finale (à l'exclusion) sbuilder.insert (0, new StringBuffer ("StringBuilder"), 6, 13); // insérer l'objet StringBuffer en position 0. Sbuilder.insert (0, new StringBuffer ("StringBuffer")); // insérer l'objet StringBuffer en position 0. 6 représente la position de début (y compris) de l'objet inséré en position 0, 12 est la position finale (à l'exclusion) sbuilder.insert (0, new StringBuffer ("StringBuffer"), 6, 12); // insérer l'objet String en position 0. Sbuilder.insert (0, "String"); // insérer l'objet de chaîne en position 0. 1 représente la position de début (y compris) de l'objet inséré en position 0, 6 est la position finale (à l'exclusion) sbuilder.insert (0, "0123456789", 1, 6); sbuilder.insert (0, '/ n'); // Insérez l'objet objet en position 0. 此处以 Hashmap 为例 HashMap Map = new HashMap (); map.put ("1", "un"); map.put ("2", "deux"); map.put ("3", "trois"); sbuilder.insert (0, carte); System.out.printf ("% s / n / n", sbuilder); } / ** * StringBuffer 的 APPEND () 示例 * / Private Static void testAPPEndapis () {System.out.println ("-------------------------------- TestAPPEndapis ------------------------------"); StringBuffer sbuilder = new StringBuffer (); // Ajouter le tableau des caractères sbuilder.append (new char [] {'a', 'b', 'c', 'd', 'e'}); // Ajouter un tableau de caractères. 0 indique la position de départ du tableau de caractères, 3 indique la longueur sbuilder.append (new char [] {'a', 'b', 'c', 'd', 'e'}, 0, 3); // append float sbuilder.append (1.414f); // appelez le double sbuilder.append (3.14159d); // Ajouter le booléen sbuilder.append (true); // ajoute char sbuilder.append ('/ n'); // Ajouter int sbuilder.append (100); // Ajouter le long sbuilder.append (12345l); // APPEND StringBuilder Object Sbuilder.Apend (new StringBuffer ("StringBuilder")); // APPENDRE STRINGBUILDER OBJET. 6 Indique la position de début (y compris) de l'objet annexe, 13 est la position finale (à l'exclusion) sbuilder.append (new StringBuffer ("StringBuilder"), 6, 13); // Ajouter l'objet StringBuffer. sbuilder.append (new StringBuffer ("StringBuffer")); // Ajouter l'objet StringBuffer. 6 Indique la position de début (y compris) de l'objet annexe, 12 est la position finale (à l'exclusion) sbuilder.append (new StringBuffer ("StringBuffer"), 6, 12); // Ajouter l'objet String. sbuilder.append ("string"); // Ajouter l'objet String. 1 indique la position de début (y compris) de l'objet annexe, 6 est la position finale (à l'exclusion) sbuilder.append ("0123456789", 1, 6); sbuilder.append ('/ n'); // Ajouter l'objet objet. Ici, nous prenons HashMap comme exemple de HashMap Map = new HashMap (); map.put ("1", "un"); map.put ("2", "deux"); map.put ("3", "trois"); sbuilder.append (map); sbuilder.append ('/ n'); // Ajouter uncode Unicode codage sBuilder.ApendCodePoint (0x5b57); // 0x5b57 est le codage Unicode en codant SBuilder.ApendCodePoint (0x7b26); // 0x7b26 est le codage Unicode en codant SBuilder.ApendCodePoint (0x7f16); // 0x7f16 est le codage Unicode "codé" sbuilder.appendCodePoint (0x7801); // 0x7801 est le System de codage Unicode "encodé", System.out.print ("% S / N / N", SBuilder); }} Résultats en cours:
-------------------------------- TestiNsertapis ------------------------------- {3 = trois, 2 = deux, 1 = un} 12345StringBufferstringBufferBuilderstringBuilder12345100True3.141591.414abcabcde ----------------------------------------------- --------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------- SBUILDER = ABCABCABABCABABABABABABCSBUILDER.Indexof ("BC") = 1SBUILDER.Indexof ("BC", 5) = 22SBUILDER.LASTIDEXOF ("BC") = 22SBUILDER-LASTIDEXOF ("BC", 4) =--------------------- Testotherapis -------------------------------- CAP = 26C = 6Carr [0] = 3 Carr [1] = 4 Carr [2] = 5 Carr [3] = 6