StringBuffer é uma sequência de caracteres variável e segura por rosca. Ele herda do AbstractStringBuilder e implementa a interface Charsequence.
StringBuilder também é uma subclasse herdada do AbstractStringBuilder; No entanto, StringBuilder e StringBuffer são diferentes. O primeiro é não-seguro, enquanto o último é seguro para fios.
O diagrama de relacionamento entre StringBuffer e Charquence é o seguinte:
A classe StringBuffer é como string e também é usada para representar strings. No entanto, como a implementação interna do StringBuffer é diferente da String, o StringBuffer não gera novos objetos ao processar strings e é melhor que a classe String no uso da memória.
Portanto, ao usá -lo em uso real, se você geralmente precisar modificar uma string, como inserção, exclusão etc., é mais adequado usar StringBuffer.
Existem muitos métodos na classe StringBuffer que são os mesmos da classe String. Esses métodos são funcionalmente os mesmos que as funções na classe String.
Mas há uma das diferenças mais significativas, pois cada modificação do objeto StringBuffer altera o próprio objeto, que é a maior diferença da classe String.
Além disso, como o StringBuffer é seguro para threads, existem capítulos especiais para introduzir o conceito de threads no futuro, para que também possa ser usado em programas com vários threads, mas a eficiência da execução do programa é relativamente lenta.
0. Inicialização do objeto StringBuffer
A inicialização de um objeto StringBuffer não é como a inicialização de uma classe String. O Java fornece sintaxe especial e, em circunstâncias normais, geralmente é usado para inicializá -lo usando construtores.
Por exemplo:
StringBuffer S = new StringBuffer ();
O objeto StringBuffer inicializado dessa maneira é um objeto vazio.
Se você precisar criar um objeto StringBuffer com conteúdo, você pode usar:
StringBuffer S = new StringBuffer ("ABC"); O conteúdo do objeto StringBuffer inicializado dessa maneira é a string "ABC".
Deve -se notar que StringBuffer e String são tipos diferentes e não podem ser fundidos diretamente. O código a seguir está errado:
Stringbuffer s = "abc"; // O tipo de atribuição não corresponde a StringBuffer S = (StringBuffer) "ABC"; // Não há relação de herança e é impossível forçar a rotação.
O código para transmutar entre o objeto StringBuffer e o objeto String é o seguinte:
String s = "abc"; stringbuffer sb1 = new StringBuffer ("123"); stringbuffer sb2 = new StringBuffer (s); // String converte em StringBufferString s1 = sb1.toString (); // StringBuffer converte em string 1. Lista de funções do StringBuffer
Stringbuffer () stringbuffer (intacabilidade int) stringbuffer (string string) stringbuffer (charsequence cs) stringbuffer append (boolean b) stringbuffer append (int i) stringbuffer apêndice (sinroffher sinrofbuffer stringbuffer append (float f) stringbuffer append (duplo d) synchroftized stringbuffer append (float f) stringbenpênd) 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) Sincronizado void getchars (int start, int end, char [] tampão, int idx) sincronizado Int indexOf (String substring, int start) int indexof (string string) stringbuffer insert (Int Index, índice, índice, boolean b) stringbuffer l) longbuffer (int index, i) string insert (insert insert, insert, insert, índice, bolean b) string buffer (int), interinsergbuffer (Int Index, insert, índice, Int, boolean b) LongBuffer L) 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)synchronized StringBuffer insert(int index, CHARSENCIONENTE S) SINCRONIZADO STRINGBUFFER INSERIÇÃO (INT INDEX, CHARSESCENCIÇÃO S, INT START, INT END) INT LASTIndexOF (String String) Sincronizado Int LastIndexOF (String Substring, Int START) Int Length (SINCHRONIZADO SINCRONDIZADO Int OffsetByCoDePoints (INDEXTOFOINTETOFFONET) SINCHRONIZADO SINCHROFFERTBUFFER (Int Index, Int Codeontefset) reverse () sincronizado void setcharat (int índice, char ch) sincronizado void setLenthnth (int length) Sincronizou a subsequence subsequence (int, int, int end) sincronizada String substring (int start) sincronizada String Substring (Int Start, int end) Sinronized string tostring () syncronized Void Void Void
2. Exemplo de StringBuffer
O código -fonte é o seguinte (StringBufferstest.java):
/*** StringBuffer Demo Program*/importar java.util.hashmap; public class stringbufferestest {public static void main (string [] args) {testInstapis (); testAppendepApis (); testReplaceApis (); testDeleteapis (); testIndexapis (); testOterapis (); } / *** Outros exemplos da API de StringBuffer* / private estático void testOterapis () {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 = novo 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 中 ÍNDICE 相关 API 演示* / private estático void testIndexapis () {System.out.println ("---------------------------------- TestIndexapis ----------------------------------"); StringBuffer sbuilder = new StringBuffer ("abcabcabcabcabcabcabcabc"); System.out.printf ("sbuilder =%s/n", sbuilder); // 1. De frente para trás, encontre o local em que "BC" aparece pela primeira vez System.out.printf (" %-30s = %d/n", "sbuilder.indexof (/" bc/")", sbuilder.indexOf ("bc")); // 2. Da posição 5, da frente para trás, encontre o local onde "BC" aparece pela primeira vez System.out.printf (" %-30s = %d/n", "sbuilder.indexOf (/" bc/", 5)", sbuilder.indexof ("bc", 5)); // 3. De volta à frente, encontre o local onde "BC" aparece pela primeira vez System.out.printf (" %-30s = %d/n", "sbuilder.lastindexof (/" bc/")", sbuilder.lastindexOF ("bc"); // 4. De volta à frente, encontre o local onde "BC" aparece pela primeira vez System.out.printf (" %-30S = %d/n", "sbuilder.lastindexOf (/" bc/", 4)", sbuilder.lastindexOF ("BC", 4); System.out.println (); } / *** StringBuffer 的 substituir () 示例* / private estático 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 () Exemplo* / private estático void testDeleteapis () { System.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Sbuilder.DeletCharat (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 () Exemplo de stringbuffer* / private estático void testInstapis () { System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 0 representa a posição inicial da matriz de caracteres, 3 representa o comprimento sbuilder.insert (0, novo char [] {'a', 'b', 'c', 'd', 'e'}, 0, 3); O que você precisa saber para começar o dia bem -informado. // insert int sbuilder.insert (0, 100); // insira long sbuilder.insert (0, 12345L); // Insira o objeto StringBuilder sbuilder.insert (0, new StringBuffer ("StringBuilder")); // Insira o objeto StringBuilder na posição 0. 6 representa a posição inicial (incluindo) do objeto inserido na posição 0, 13 é a posição final (excluindo) sbuilder.insert (0, new StringBuffer ("Stringbuilder"), 6, 13); // Insira o objeto StringBuffer na posição 0. sbuilder.insert (0, new StringBuffer ("StringBuffer")); // Insira o objeto StringBuffer na posição 0. 6 representa a posição inicial (incluindo) do objeto inserido na posição 0, 12 é a posição final (excluindo) sbuilder.insert (0, new StringBuffer ("StringBuffer"), 6, 12); // Insira o objeto String na posição 0. Sbuilder.insert (0, "string"); // Insira o objeto String na posição 0. 1 representa a posição inicial (incluindo) do objeto inserido na posição 0, 6 é a posição final (excluindo) sbuilder.insert (0, "0123456789", 1, 6); sbuilder.insert (0, '/n'); // Insira o objeto Objeto na posição 0. 此处以 hashmap 为例 hashmap map = new hashmap (); map.put ("1", "One"); map.put ("2", "dois"); map.put ("3", "três"); sbuilder.insert (0, mapa); System.out.printf ("%s/n/n", sbuilder); } / *** StringBuffer 的 Append () 示例* / private estático void testAppendepis () {System.out.println ("-------------------------------- TestAppendepis ------------------------------------"); Stringbuffer sbuilder = new StringBuffer (); // Anexar a matriz de caracteres sbuilder.append (novo char [] {'a', 'b', 'c', 'd', 'e'}); // anexar a matriz de caracteres. 0 indica a posição inicial da matriz de caracteres, 3 indica o comprimento sbuilder.append (novo char [] {'a', 'b', 'c', 'd', 'e'}, 0, 3); // anexar flutuador sbuilder.append (1.414f); // Anexar Sbuilder.Append (3.14159D); // anexar sbuilder.append (true); // anexar char sbuilder.append ('/n'); // Anexar int sbuilder.append (100); // anexar long sbuilder.append (12345L); // Anexar o objeto StringBuilder sbuilder.append (new StringBuffer ("StringBuilder")); // Anexar o objeto StringBuilder. 6 indica a posição inicial (incluindo) do objeto anexado, 13 é a posição final (excluindo) sbuilder.append (new StringBuffer ("StringBuilder"), 6, 13); // Anexar o objeto StringBuffer. sbuilder.append (new stringbuffer ("stringbuffer")); // Anexar o objeto StringBuffer. 6 indica a posição inicial (incluindo) do objeto anexado, 12 é a posição final (excluindo) sbuilder.append (new StringBuffer ("StringBuffer"), 6, 12); // Anexar o objeto String. sbuilder.append ("string"); // Anexar o objeto String. 1 indica a posição inicial (incluindo) do objeto anexado, 6 é a posição final (excluindo) sbuilder.append ("0123456789", 1, 6); sbuilder.append ('/n'); // anexar objeto objeto. Aqui tomamos o hashmap como exemplo hashmap map = new hashmap (); map.put ("1", "One"); map.put ("2", "dois"); map.put ("3", "três"); sbuilder.append (map); sbuilder.append ('/n'); // Anexar Unicode que codifica Sbuilder.appendCodePoint (0x5b57); // 0x5b57 é o unicode que codifica Sbuilder.appendCodePoint (0x7b26); // 0x7b26 é o unicode que codifica Sbuilder.appendCodePoint (0x7f16); // 0x7f16 é o unicode codificador "codificado" que codifica sbuilder.appendcodePoint (0x7801); // 0x7801 é o unicode codificador "codificado" System.out.printf ("%s/n/n", sbuilder); }} Resultados em execução:
---------------------------------- TestInsertapis ------------------------------- {3 = três, 2 = dois, 1 = um} 12345StringBufferStringBufferBuilDerstringBuilder12345100True3.141591.414AppiAnpAnabcabcde12345100True3.141591.414Appis ---------------- ------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------- SBUILDER = ABCABCABCABCABCABCABCABCSBUILDER.Indexof ("BC") = 1Sbuilder.indexOf ("BC", 5) = 22sbuilder.LASTIndexOf ("BC") = 22 --------------ELTILAC- -----ELTILACHOTILIGELI- ---------------------------------- Cap = 26c = 6Carr [0] = 3 Carr [1] = 4 Carr [2] = 5 Carr [3] = 6