StringBuffer es una secuencia de caracteres variable segura de hilo. Hereda de AbstractStringBuilder e implementa la interfaz CharSequence.
StringBuilder también es una subclase heredada de AbstractStringBuilder; Sin embargo, StringBuilder y StringBuffer son diferentes. El primero no es seguro para el hilo, mientras que el segundo es seguro de hilo.
El diagrama de relaciones entre StringBuffer y CharSequence es el siguiente:
La clase StringBuffer es como una cadena y también se usa para representar cadenas. Sin embargo, debido a que la implementación interna de StringBuffer es diferente de String, StringBuffer no genera nuevos objetos al procesar cadenas, y es mejor que la clase de String en el uso de la memoria.
Por lo tanto, al usarlo en uso real, si a menudo necesita modificar una cadena, como inserción, eliminación, etc., es más adecuado usar StringBuffer.
Hay muchos métodos en la clase StringBuffer que son los mismos que la clase String. Estos métodos son funcionalmente los mismos que las funciones en la clase de cadena.
Pero existe una de las diferencias más significativas en que cada modificación del objeto StringBuffer cambia el objeto en sí, que es la mayor diferencia de la clase de cadena.
Además, dado que StringBuffer es a prueba de hilos, hay capítulos especiales para introducir el concepto de hilos en el futuro, por lo que también se puede usar en programas de múltiples temas, pero la eficiencia de ejecución del programa es relativamente lenta.
0. Inicialización del objeto StringBuffer
La inicialización de un objeto StringBuffer no es como la inicialización de una clase de cadena. Java proporciona una sintaxis especial, y en circunstancias normales, generalmente se usa para inicializarla utilizando constructores.
Por ejemplo:
StringBuffer s = new StringBuffer ();
El objeto StringBuffer inicializado de esta manera es un objeto vacío.
Si necesita crear un objeto StringBuffer con contenido, puede usar:
StringBuffer S = new StringBuffer ("ABC"); El contenido del objeto StringBuffer inicializado de esta manera es la cadena "ABC".
Cabe señalar que StringBuffer y String son diferentes tipos y no se pueden lanzar directamente. El siguiente código es incorrecto:
StringBuffer S = "ABC"; // El tipo de asignación no coincide con StringBuffer S = (StringBuffer) "ABC"; // No hay una relación de herencia y es imposible forzar la rotación.
El código para transmutar entre el objeto StringBuffer y el objeto String es el siguiente:
String S = "ABC"; StringBuffer sb1 = new StringBuffer ("123"); StringBuffer sb2 = new StringBuffer (s); // Cadena convertir a StringBufferString s1 = sb1.ToString (); // StringBuffer Convertir a String 1. Lista de funciones de StringBuffer
StringBuffer () stringBuffer (int capacidad) stringBuffer (string string) stringBuffer (charsequence cs) stringBuffer append (boolean b) stringbuffer append (int i) stringbuffer append (long l) stringbuffer append (float f) stringbuffer appending appendronized stringbuffer append (char ch) synchon synchonbuffereBuffer (char [] APPEND (CARFER (CARFER APPEND STRINGBER) chars) sincronizado stringbuffer append (char [] chars, int inicio, int longitud) sincronizado StringBuffer append (object obj) sincronizado stringbuffer append (string string) sincronizado stringbuffer append (stringBuffer sb) sincronizado stringbuffer (charshent (charshent s) sincronizado stringbuffer append (charlas charshent stingbuffer stringbuffer (starter starter stingBuffer (inicio de string) appendCodePoint (int CodePoint) int capacidad () sincronizado charat (int index) sincronizado int codePointat (int index) int codePointBeinfore (int index) sincronizado int codePointCount (int beginindex, int endindex) sincronizado sincronizado stringbuffer delete (int inicio, int end) stringbuffer sincronizado (int) sincronizada EnsureCapacity (int min) sincronizado void getChars (int inicio, int end, char [] buffer, int idx) sincronizado int indexOf (string substring, int start) int indexOf (string string) stringbuffer insert (int index, boolean b) stringbuffer insert (int ix, int i) stringbuffer (int igry (int igry (int INDEX (int INDED doble d) sincronizado StringBuffer Insert (int index, char ch) sincronizado stringbuffer insers (int index, char [] chars) sincronizado stringbuffer insers (int index, char [] chars, int inicio, int long) sincronizado stringbuffer inser. inser (int index, CharSequence s, int inicio, int end) int LastIndexOf (String String) sincronizado int LastIndexOf (String Substring, int inicio) int long () sincronizado int offSetByCodePoints (int index, int codePointOffSet) sincronizado stringbuffer (int intoT, int end, string string) sincronizado stringbuffer revers Ch) sincronizado setLength (int long) sincronizado subsecuencia subsecuencia (int inicio, int end) subcadena de cadena sincronizada de cadena sincronizada (int inicio) Cadena sincronizada de cadena (int inicio, int end) ToString () sincronizado Void TRIMTOSize ()
2. Ejemplo de stringbuffer
El código fuente es el siguiente (StringBuffertest.java):
/*** Programa de demostración de StringBuffer*/import java.util.hashmap; public class StringBuffertest {public static void main (string [] args) {testInsertapis (); testAppendapis (); testReplaceapis (); testDelEteapis (); testIndexapis (); testotherapis (); } / *** Otros ejemplos 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); para (int i = 0; i <carr.length; i ++) System.out.printf ("Carr [%d] =%C", i, Carr [i]); System.out.println (); System.out.println (); } / *** StringBuffer 中 中 相关 API 演示* / private static void testIndexapis () {System.out.println ("-------------------------------- TestIndexapis ------------------------------------"); StringBuffer sbuilder = new StringBuffer ("ABCABCABCABCABCABCABCABC"); System.out.printf ("sBuilder =%s/n", sbuilder); // 1. De adelante hacia atrás, encuentre la ubicación donde aparece "BC" para la primera vez System.out.printf (" %-30s = %d/n", "sbuilder.indexof (/" bc/")", sbuilder.indexof ("bc")); // 2. Desde la posición 5, de adelante hacia atrás, encuentre la ubicación donde "BC" aparece para la primera vez System.out.printf (" %-30s = %d/n", "sbuilder.indexof (/" bc/", 5)", sbuilder.indexof ("bc", 5)); // 3. De vuelta a delantera, encuentre la ubicación donde aparece "BC" para la primera vez System.out.printf (" %-30s = %d/n", "sbuilder.lastindexof (/" bc/")", sbuilder.lastindexof ("bc")); // 4. De vuelta a delantera, encuentre la ubicación donde aparece "BC" para la primera vez System.out.printf (" %-30s = %d/n", "sbuilder.lastindexof (/" bc/", 4)", sbuilder.lastindexof ("bc", 4)); System.out.println (); } / *** stringBuffer 的 reemplazar () 示例* / 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 () Ejemplo* / Private static void testDelEteapis () { 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 () Ejemplo de StringBuffer* / private static void testInsertapis () { System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------------------------------------------------- 0 representa la posición inicial de la matriz de caracteres, 3 representa la longitud sbuilder. sbuilder.insert (0, verdadero); // insertar int sbuilder.insert (0, 100); // insertar sbuilder long.insert (0, 12345l); // Inserte el objeto StringBuilder sBuilder.insert (0, nuevo StringBuffer ("StringBuilder")); // Inserte el objeto StringBuilder en la posición 0. 6 representa la posición de inicio (incluido) del objeto insertado en la posición 0, 13 es la posición final (excluyendo) sbuilder.insert (0, nueva stringbuffer ("stringBuilder"), 6, 13); // Inserte el objeto StringBuffer en la posición 0. SBuilder.insert (0, nuevo StringBuffer ("StringBuffer")); // Inserte el objeto StringBuffer en la posición 0. 6 representa la posición de inicio (incluido) del objeto insertado en la posición 0, 12 es la posición final (excluyendo) sbuilder.insert (0, nueva stringbuffer ("stringbuffer"), 6, 12); // inserta el objeto de cadena en la posición 0. SBuilder.insert (0, "String"); // Inserte el objeto de cadena en la posición 0. 1 representa la posición de inicio (incluido) del objeto insertado en la posición 0, 6 es la posición final (excluyendo) sbuilder.insert (0, "0123456789", 1, 6); sbuilder.insert (0, '/n'); // Inserte el objeto Objeto en la posición 0. 此处以 Hashmap 为例 Hashmap MAP = new Hashmap (); map.put ("1", "one"); map.put ("2", "dos"); map.put ("3", "tres"); sbuilder.insert (0, mapa); System.out.printf ("%s/n/n", sbuilder); } / *** StringBuffer 的 append () 示例* / private static void testAppendapis () {System.out.println ("-------------------------------- TestAppendapis ----------------------------------"); StringBuffer sBuilder = new StringBuffer (); // Agregar la matriz de caracteres sbuilder.append (new Char [] {'a', 'b', 'c', 'd', 'e'}); // Agregar la matriz de personajes. 0 indica la posición inicial de la matriz de caracteres, 3 indica la longitud sbuilder.append (nueva char [] {'a', 'b', 'c', 'd', 'e'}, 0, 3); // Agregar float sbuilder.append (1.414f); // Agregar doble sbuilder.append (3.14159d); // Agregar boolean sbuilder.append (verdadero); // Append char sbuilder.append ('/n'); // Append int sbuilder.append (100); // agregar long sbuilder.append (12345l); // Append StringBuilder Object sbuilder.append (new StringBuffer ("StringBuilder")); // Agregar objeto StringBuilder. 6 indica la posición de inicio (que incluye) del objeto agregado, 13 es la posición final (excluyendo) sbuilder.append (new StringBuffer ("StringBuilder"), 6, 13); // Agregar objeto StringBuffer. sbuilder.append (new StringBuffer ("StringBuffer")); // Agregar objeto StringBuffer. 6 indica la posición de inicio (que incluye) del objeto agregado, 12 es la posición final (excluyendo) sbuilder.append (new StringBuffer ("StringBuffer"), 6, 12); // Agregar objeto de cadena. sbuilder.append ("cadena"); // Agregar objeto de cadena. 1 indica la posición de inicio (que incluye) del objeto adjunto, 6 es la posición final (excluyendo) sbuilder.append ("0123456789", 1, 6); sbuilder.append ('/n'); // Agregar objeto objeto. Aquí tomamos el hashmap como un ejemplo de mapa hashmap = new Hashmap (); map.put ("1", "one"); map.put ("2", "dos"); map.put ("3", "tres"); sbuilder.append (mapa); sbuilder.append ('/n'); // Agregar unicode codificando sbuilder.appendCodePoint (0x5b57); // 0x5b57 es el unicode que codifica sbuilder.appendCodePoint (0x7b26); // 0x7b26 es el unicode que codifica sbuilder.appendCodePoint (0x7f16); // 0x7f16 es el unicode "codificado" que codifica sbuilder.appendCodePoint (0x7801); // 0x7801 es el sistema de codificación unicode "codificado". }} Resultados de ejecución:
------------------------------- ----------------------------- --------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------- --------------------------- -------------------------------- Cap = 26c = 6Carr [0] = 3 Carr [1] = 4 Carr [2] = 5 Carr [3] = 6