0. Introdução ao tipo StringBuilder
O tipo StringBuilder é um tipo de sequência mutável. A API do tipo StringBuilder é basicamente a mesma da API do tipo StringBuffer. A única diferença é que o uso do StringBuilder assume que ele está em um único thread. Em outras palavras, o StringBuilder é inseguro. Ao instantar o StringBuilder, geralmente define um tamanho de capacidade por padrão, geralmente o comprimento do parâmetro String +16. O StringBuilder herda a classe abstrata AbstractStringBuilder, e a classe abstrata é implementada internamente usando matrizes de caracteres, e a matriz pode ser expandida dinamicamente. Os métodos comuns fornecidos pela classe StringBuilder incluem append (), insert (), substituir (), DeLeTecharat (), indexof (), reverse (), tostring () e outros métodos, que podem realizar funções básicas, como adicionar, excluir, modificar e pesquisar as seqüências.
pacote date0812.demo1; classe pública test3 {public static void main (string [] args) {stringbuilder stringbuilder = new stringbuilder ("eclipse"); // adicione stringbuilder = stringbuilder.append ("software"); // capacidade int c = stringbuilder.capacity (); // flip stringbuilder = stringbuilder.reverse (); System.out.println (c); System.out.println (StringBuilder); }} Resultados em execução:
23Erawtfos Espilce
1. Método Stringbuilder
StringBuilder é uma sequência de caracteres variável. Ele herda do AbstractStringBuilder e implementa a interface Charsequence.
StringBuffer 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 StringBuilder e Charquence é o seguinte:
Lista de métodos StringBuilder:
StringBuilder () StringBuilder (Int Capacidade) 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) Strings Append Append (Append Stringbuilder) Anexar (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, start int, e end) (stringbuilder AppendCodePoint codePointat (int index) int codePointbe antes (int index) int codePointCount (int, start, int end) StringBuilder Delete (int start, int end) stringbuilder DeLeTecharat (int index) void eSurEcApacity (int min) Void Getchars (int, int, final, char [] DST, INTSTART) insert(int offset, boolean 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 o deslocamento, string str) stringbuilder insert (int offset, object obj) stringbuilder insert (int offset, charsequence s) stringbuilder insert (stringsTeT (string string strings, string s), int, int lastIndExof (string) intinset (string stringsning, string s, start, int) int) codepointOffset) stringbuilder repliply (int start, int end, string string) stringbuilder reverse () void setcharat (int index, char ch) void setLenthngth (int length) charrequence subsequence (int start, int end) string trimtros (int) substring de string (int, int) tostring string) trimadas trimadas ()
Como o código -fonte do AbstractStringBuilder e StringBuilder é muito longo, o código -fonte não será listado aqui. Os leitores interessados podem estudá -lo.
2. Código de teste da API StringBuilder
2.1 Inserir (inserir) API relacionada no StringBuilder
O código -fonte é o seguinte (StringBuilderInsertTest.java):
/** * stringbuilder 的 insert () 示例 * * @author skywang */importar java.util.hashmap; public class stringbuilderInserttest {public static void main (string [] args) {testInstapis (); } / *** stringbuilder 的 insert () 示例* / private estático void testInstapis () {System.out.println ("-------------------------------- TestInstapis ---------------------------------"); Stringbuilder sbuilder = new stringbuilder (); // Insira a matriz de caracteres na posição 0 sbuilder.insert (0, novo char [] {'a', 'b', 'c', 'd', 'e'}); // Insira a matriz de caracteres na posição 0. // inserir float sbuilder.insert (0, 1.414f); // insira duplo sbuilder.insert (0, 3.14159d); // insira sbuilder.insert boolean (0, true); // insira char sbuilder.insert (0, '/n'); // insert int sbuilder.insert (0, 100); // insira long sbuilder.insert (0, 14159d); // insira sbuilder.insert boolean (0, true); // insira char sbuilder.insert (0, '/n'); // insert int sbuilder.insert (0, 100); // insira long sbuilder.insert (0, 12345L); // Insira o objeto StringBuilder sbuilder.insert (0, new StringBuilder ("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 StringBuilder ("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. Aqui tomamos o hashmap como exemplo 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); }} Resultados em execução:
---------------------------
2.2 Appender (Apênder) APIs relacionadas no StringBuilder
O código -fonte é o seguinte (StringBuilderAppendTest.java):
/** * StringBuilder 的 Append () 示例 * * @Author Skywang */importar java.util.hashmap; public class stringbuilderAppendTest {public static void main (string [] args) {testAppendapis (); } / *** StringBuilder 的 Append () 示例* / private estático void testAppendepis () {System.out.println ("-------------------------------- TestAppendepis ---------------------------------"); Stringbuilder sbuilder = new stringbuilder (); // 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 StringBuilder ("StringBuilder")); // Anexar o objeto StringBuilder. 6 indica a posição inicial (incluindo) do objeto anexado, 13 é a posição final (excluindo) sbuilder.append (new StringBuilder ("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:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.3 Substitua as APIs relacionadas no StringBuilder
O código -fonte é o seguinte (StringBuilderReplaceTest.java):
/** * StringBuilder 的 substituir () 示例 * * @author Skywang */importar java.util.hashmap; public class stringbuilderReplaceTest {public static void main (string [] args) {testReplaceapis (); } / *** StringBuilder 的 substituir () 示例* / private estático 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 (); }} Resultados em execução:
-------------------------
2.4 Excluir (excluir) API relacionada no StringBuilder
O código -fonte é o seguinte (StringBuilderDeleteTest.java):
/** * StringBuilder 的 Delete () 示例 * * @Author Skywang */importar java.util.hashmap; public class stringbuilderDeleteTest {public static void main (string [] args) {testDeleteapis (); } / *** StringBuilder 的 Delete () 示例* / private estático void testDeleteapis () {System.out.println ("-------------------------------- TestDeleteapis ---------------------------------"); Stringbuilder sbuilder = new stringbuilder ("0123456789"); // Exclua o caractere na posição 0, o caractere restante é "123456789". sbuilder.deleteCharat (0); // Excluir caracteres entre a posição 3 (incluindo) e a posição 6 (excluindo), e os caracteres restantes são "123789". sbuilder.delete (3,6); // Obtenha a string a partir da posição 1 na string sb str1 = sbuilder.substring (1); // Obtenha a string da posição 3 (incluindo) para a posição 5 (excluindo) em sb string str2 = sbuilder.substring (3, 5); // Obtenha a string da posição 3 (incluindo) para a posição 5 (excluindo) em sb string str3 = (string) sbuilder.subsequence (3, 5); System.out.printf ("sbuilder =%s/nstr1 =%s/nstr2 =%s/nstr3 =%s/n", sbuilder, str1, str2, str3); }} Resultados em execução:
-------------------------
2.5 API relacionada ao índice no StringBuilder
O código -fonte é o seguinte (StringBuilderIndExtest.java):
/** * Demonstração da API relacionada ao índice em StringBuilder * * @Author Skywang */importar java.util.hashmap; public class stringbuilderIndextestSest {public static void main (string [] args) {testIndexapis (); } / *** Demonstração de API relacionada ao índice em StringBuilder* / Private Static void testIndexapis () { System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Stringbuilder ("abcabcabcabcabcabcabcabc"); A partir de agora, você está com a renda de produtos de regressão linear. 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 (); }} Resultados em execução:
---------------------------------- TestIndexapis -------------------------------- Sbuilder = abcabcabcabcabcabcabcabcsbuilder.indexof ("bc") = 1sbuilder.indexof ("bc", 5) = 22sbuilder.LastindexOf ("bc") = 22sbuilder.LastindexOf ("bc") = 22sbuilder.LastindexOf 2.6 Stringbuilder restante API
O código -fonte é o seguinte (StringBuilderTerTest.java):
/** * Outros exemplos da API de StringBuilder * * @Author Skywang */importar java.util.hashmap; public class stringbuilderotertest {public static void main (string [] args) {testOterapis (); } / *** Outros exemplos da API de StringBuilder* / private estático void testOterapis () { System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 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); for (int i = 0; i <carr.Length; i ++) System.out.printf ("Carr [%d] =%C", I, Carr [i]); Resultados em execução:
-------------------------
3. Exemplo completo de Stringbuilder
O exemplo a seguir é um programa completo de demonstração do StringBuilder que integra os exemplos acima. O código -fonte é o seguinte (StringBuilderTest.java):
/** * Programa de demonstração de StringBuilder * * @Author Skywang */importar java.util.hashmap; public class stringbuildertest {public static void main (string [] args) {testOterapis (); testIndexapis (); testInsERtapis (); testAppendepApis (); testReplaceApis (); testDeleteapis (); } / *** Outros exemplos da API de StringBuilder* / private estático void testOterapis () {System.out.println ("---------------------------------- TestOtherapis ------------------------------"); 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 = 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 (); } / *** StringBuilder 中 ÍNDICE 相关 API 演示* / private estático void testIndexapis () {System.out.println ("---------------------------------- TestIndexapis ----------------------------------"); Stringbuilder sbuilder = new stringbuilder ("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 (); } / *** StringBuilder 的 substituir () 示例* / private estático 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 () 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); } / *** stringbuilder insert () exemplo* / 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); Sbuilder.insert (0, verdadeiro); // insira char sbuilder.insert (0, '/n'); // insert int sbuilder.insert (0, 100); // insira long sbuilder.insert (0, 12345L); // Insira o objeto StringBuilder sbuilder.insert (0, new StringBuilder ("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 StringBuilder ("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); } / *** StringBuilder 的 Append () 示例* / private estático void testAppendepis () {System.out.println ("---------------------------------- TestAppendepis -------------------------------------"); Stringbuilder sbuilder = new stringbuilder (); // 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 StringBuilder ("StringBuilder")); // Anexar o objeto StringBuilder. 6 indica a posição inicial (incluindo) do objeto anexado, 13 é a posição final (excluindo) sbuilder.append (new StringBuilder ("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); }}