StringBufferは、スレッドセーフ、可変文字シーケンスです。 AbstractStringBuilderから継承し、CharSequenceインターフェイスを実装します。
StringBuilderは、AbstractStringBuilderから継承されたサブクラスです。ただし、StringBuilderとStringBufferは異なります。前者は非スレッドセーフであり、後者はスレッドセーフです。
StringBufferとCharSequenceの関係図は次のとおりです。
StringBufferクラスは文字列のようなもので、文字列を表すためにも使用されます。ただし、StringBufferの内部実装は文字列とは異なるため、StringBufferは文字列を処理するときに新しいオブジェクトを生成せず、メモリ使用法では文字列クラスよりも優れています。
したがって、実際に使用する場合、挿入、削除などの文字列を変更する必要がある場合がある場合は、StringBufferを使用する方が適しています。
StringBufferクラスには、文字列クラスと同じ多くの方法があります。これらの方法は、文字列クラスの関数と機能的に同じです。
しかし、StringBufferオブジェクトの各変更がオブジェクト自体を変更することには、最も重要な違いの1つがあります。これは、文字列クラスとの最大の違いです。
さらに、StringBufferはスレッドセーフであるため、将来的にスレッドの概念を導入するための特別な章があるため、マルチスレッドプログラムでも使用できますが、プログラムの実行効率は比較的遅いです。
0。StringBufferオブジェクトの初期化
文字列バッファオブジェクトの初期化は、文字列クラスの初期化のようなものではありません。 Javaは特別な構文を提供し、通常の状況では、通常、コンストラクターを使用して初期化するために使用されます。
例えば:
stringbuffer s = new StringBuffer();
この方法で初期化されたStringBufferオブジェクトは空のオブジェクトです。
コンテンツでStringBufferオブジェクトを作成する必要がある場合は、以下を使用できます。
stringbuffer s = new StringBuffer( "ABC");
この方法で初期化されたStringBufferオブジェクトのコンテンツは、文字列「ABC」です。
StringBufferとStringは異なるタイプであり、直接キャストできないことに注意する必要があります。次のコードが間違っています:
stringbuffer s = "abc"; //割り当てタイプは、stringbuffer s =(stringbuffer) "abc"と一致しません。 //相続関係はなく、回転を強制することは不可能です。
stringbufferオブジェクトとstringオブジェクトの間でトランスミューティングするためのコードは次のとおりです。
string s = "abc"; stringbuffer sb1 = new stringbuffer( "123"); stringbuffer sb2 = new stringbuffer(s); // stringにstringbufferstringに変換s1 = sb1.tostring(); // stringbuffer stringに変換します
1.StringBuffer関数リスト
StringBuffer()StringBuffer(int Capizeal)StringBuffer(String String)StringBuffer(CharSequence CS)StringBuffer Append(Boolean B)StringBuffer Append(int i)Stringbuffer Append(long l)Stringbuffer append(float f)stringbuffer append(double d)synchronized string append(char chhbuffer append(char charbuffer appen)追加(char [] chars、int start、int length)同期されたstringbuffer append(object obj)同期されたstringbuffer append(string string)同期されたstringbuffer append(stringbuffer sb)同期された弦楽buffer付録(char sequence s)同期されたストリングバッファー追加(charsequence s、int int int string cappoint(int appated) charat(int index)同期int codepointat(int index)同期int codepointbefore(int index)同期int codepointcount(int beginindex、int endindex)同期delete(int start、int end、int end)同期ストリングバッファーデレテチャラト(int int int inturecacity(int boid esturecacacity) end、char [] buffer、int idx)同期int indexof(string substring、int start)int indexof(int index、boolean b)stringbuffer insert(int index、int i)stringbuffer insert(int index、long l)stringbuffer insert(int index、float f)sinchbuffer insert(int index、in d)synchronized intersin Stringbuffer Insert(int index、char [] chars)同期Stringbuffer Insert(int index、chars、int start、int length)同期singbuffer挿入(int index、string string)stringbuffer insert(int、object obj)同期弦楽剤インサート(int index、charefence s)synchronized stringer inters(int int、int、int、int、int、int、ind index) string)synchronized int lastindexof(string substring、int start)int length()同期int offsetbycodepoints(int index、int codepointoffset)同期されたストリングバッファー置換(int start、int end、string)同期弦楽buffer逆()シンクロナイズされたボイドsetchronized setchronized charサブシーケンス(int start、int end)同期文字列サブストリング(int start)同期文字列サブストリング(int start、int end)同期文字列toString()同期void trimtosize()
2。StringBufferの例
ソースコードは次のとおりです(stringbuffertest.java):
/*** StringBuffer Demo Program*/Import java.util.hashmap; public class stringbuffertest {public static void main(string [] args){testinsertapis(); testAppendApis(); testReplaceapis(); testdeleteapis(); testindexapis(); testotherapis(); } /** * Other API examples of 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 stringbuffer sbuilder = new StringBuffer( "abcabcabcabcabcabcabcabc"); system.out.printf( "sbuilder =%s/n"、sbuilder); //1。前後に、「bc」が初めてsystem.out.printf( "% - 30s =%d/n"、 "sbuilder.indexof(/" bc/")"、sbuilder.indexof( "bc")); // 2。位置5から前後に、「bc」が初めてsystem.out.printf( "% - 30s =%d/n"、 "sbuilder.indexof(/" bc/"、5)"、sbuilder.indexof( "bc"、5)); //後方から正面へ、「bc」が初めてsystem.out.printf( "% - 30s =%d/n"、 "sbuilder.lastindexof(/" bc/")"、sbuilder.lastindexof( "bc")); //4。前方へ、「bc」が初めてsystem.out.printf( "%-30s =%d/n"、 "sbuilder.lastindexof(/" bc/"、4)"、sbuilder.lastindexof( "bc"、4)); System.out.println(); } / *** stringbuffer的eplace()示例* / private static void testReplaceapis(){system.out.println( "---------------------------------------------------------------------------------"); 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()example* / private static void testdeleteapis(){{ System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- sbuilder.deletecharat(0)。 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()stringbufferの例* / private static void testinsertapis(){{ System.out.println("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 0は、文字配列の開始位置を表しますsbuilder.ing(0、 '/n'); // int sbuilder.insert(0、100)を挿入します。 // long sbuilder.insert(0、12345l)を挿入します。 // StringBuilderオブジェクトsbuilder.insert(0、new StringBuffer( "StringBuilder"))を挿入します。 //位置0のStringBuilderオブジェクトを挿入します。6は、位置0に挿入されたオブジェクトの開始位置(を含む)を表します。 // StringBufferオブジェクトを位置0に挿入します。SBUILDER.INSERT(0、new StringBuffer( "StringBuffer")); //位置0にstringbufferオブジェクトを挿入します。6は、位置0に挿入されたオブジェクトの開始位置(を含む)を表します。 // sbuilder.insert(0、 "string")に文字列オブジェクトを挿入します。 //位置0.1に文字列オブジェクトを挿入します。1は、位置0に挿入されたオブジェクトの開始位置(を含む)を表します。 sbuilder.insert(0、 '/n'); //オブジェクトオブジェクトを位置0に挿入します。 map.put( "1"、 "one"); map.put( "2"、 "2"); map.put( "3"、 "3"); sbuilder.insert(0、map); System.out.printf( "%s/n/n"、sbuilder); } / *** stringbuffer的append()示例* / private static void testAppendapis(){system.out.println( "----------------------------------------------------------------------------------------------------"); stringbuffer sbuilder = new StringBuffer(); //文字配列sbuilder.append(new char [] {'a'、 'b'、 'c'、 'd'、 'e'}); //文字配列を追加します。 0文字配列の開始位置を示します。 // float sbuilder.append(1.414f)を追加します。 // double sbuilder.append(3.14159d)を追加します。 // boolean sbuilder.append(true); // char sbuilder.append( '/n'); // int sbuilder.append(100)を追加します。 // long sbuilder.append(12345l)を追加します。 // StringBuilderオブジェクトsbuilder.append(new StringBuffer( "StringBuilder")); // StringBuilderオブジェクトを追加します。 6は、追加されたオブジェクトの開始位置(を含む)を示します。13はエンド位置(除く)sbuilder.append(new StringBuffer( "StringBuilder")、6、13)です。 // stringbufferオブジェクトを追加します。 sbuilder.append(new StringBuffer( "StringBuffer")); // stringbufferオブジェクトを追加します。 6は、追加されたオブジェクトの開始位置(を含む)を示します。12はエンド位置(除く)sbuilder.append(new StringBuffer( "StringBuffer")、6、12)です。 //文字列オブジェクトを追加します。 sbuilder.append( "string"); //文字列オブジェクトを追加します。 1は、追加されたオブジェクトの開始位置(を含む)を示します。6はエンド位置(除く)sbuilder.append( "0123456789"、1、6)です。 sbuilder.append( '/n'); //オブジェクトオブジェクトを追加します。ここでは、ハッシュマップをhashmap map = new Hashmap()の例として使用します。 map.put( "1"、 "one"); map.put( "2"、 "2"); map.put( "3"、 "3"); sbuilder.append(マップ); sbuilder.append( '/n'); // sbuilder.appendCodePoint(0x5b57)をエンコードするUnicodeを追加します。 // 0x5b57は、sbuilder.appendcodepoint(0x7b26)をエンコードするUnicodeです。 // 0x7b26は、sbuilder.appendcodepoint(0x7f16)をエンコードするUnicodeです。 // 0x7f16は、sbuilder.appendcodepoint(0x7801)をエンコードする「エンコードされた」ユニコードです。 // 0x7801は、「エンコードされた」UnicodeエンコードSystem.out.printf( "%s/n/n"、sbuilder)です。 }}実行結果:
-------------------------------- testInsertAPIs -------------------------------{3=three, 2=two, 1=one}12345StringBUFFERStringBufferBUILDERStringBuilder12345100true3.141591.414ABCabcde-------------------------------- testAppendAPIs ---------------------------------- ABCDEABC1.4143.14159TRUE10012345STRINGBUILDERBUILDERSTRINGBUFFERBUFFERSTRING12345 {3 = 3、2 = 2、1 = One}文字エンコーディング --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------- sbuilder = abcabcabcabcabcabcabcabcabcsbuilder.indexof( "bc")= 1sbuilder.indexof( "bc"、5)= 22sbuilder.lastindexof( "bc")= 22sbuilder.lastindexof testotherapis -------------------------------------------------------------- 26c = 6carr [0] = 3 carr [1] = 4 carr [2] = 5 carr [3] = 6