【Java】StringBufferのメソッドとStringBuilder
最初に
Stringを復習しながらStringBufferのメソッドもまとめました。
StringBufferのメソッドを復習したい人は見てください。
StringBuffer
StringBufferは文字列を追加したり変更したりする際、使用する資料型です。
StringBufferの様々なメソッドを見ながらStringBufferの使い方をまとめました。
append
tringBufferオブジェクトを生成し、文字列を生成します。
StringBuffer sb = new StringBuffer(); // StringBuffer オブジェクト sb 生成
sb.append("hello");
sb.append(" ");
sb.append("world");
String result = sb.toString();
System.out.println(result); // "hello world"
出力
"hello world"
StringBuffer資料型はappendメソッドを使って文字列を追加し続けることができます。
そして、toString()メソッドを使えば、StringBufferをString資料型に変更することもでます。
この例をStringBufferの代わりにStringを使うように変更してみます。
String result = "";
result += "hello";
result += " ";
result += "world";
System.out.println(result); // "hello world"
出力
"hello world"
結果は同じだが、オブジェクトを生成し、メモリを使用する過程は異なります。
最初の例ではStringBufferオブジェクトを1回だけ生成するが、2回目の例ではString資料型に+演算があるたびに新しいStringオブジェクトを生成するので、計4つのString資料型オブジェクトが作られます。
Stringは、値が一度生成されると変更できないです。 toUpperCaseのようなメソッドを見れば文字列が変更されるように考えることもできますが、該当メソッドを遂行する時にまた別のStringオブジェクトを生成してリターンするだけです。 一方、StringBuffer資料型は値を変更できるので、生成された値をいつでも修正できます。
それならStringBufferを使った方がいいですか? それは状況によって違います。
StringBufferはStringより重い方です。 new String Buffer()でオブジェクトを生成すれば、Stringを使用する時よりメモリ使用量も多く速度も遅いです。
したがって、文字列を追加したり変更する作業が多ければStringBufferを、少なければStringを使用するのがいいです。
insert
insertメソッドは、特定の位置に希望する文字列を挿入することができます。
insertを使って0番目の位置にhelloという文字列を挿入してみます。
StringBuffer sb =new StringBuffer();
sb.append("world best engineer");
sb.insert(0, "hello ");
System.out.println(sb.toString());
hello world best engineer
substring
substringメソッドは、Stringのsubstringメソッドと同様に動作します。
substring(開始位置、終了位置)のように使用すると、StringBufferオブジェクトの開始位置から終了位置までの文字を抽出します。
StringBuffer sb =new StringBuffer();
sb.append("Hello World");
System.out.println(sb.substring(0, 4));
Hell
StringBuilder
StringBuilderはStringBufferに似て、使い方も同じです。
StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append(" ");
sb.append("world");
String result = sb.toString();
System.out.println(result);
出力
"hello world"
StringBufferはマルチスレッド環境で安全で、StringBuilderはStringBufferより性能が優れているというメリットがあります。
したがって、同期化を考慮する必要がない状況では、StringBufferよりStringBuilderを使用することがいいです。
Discussion