Okapi Project

StringBuffer クラス(すとりんぐばっふぁ)

バージョン
2003 年 10 月 25 日 Ver.1.1
作成者
H.Izumi ( Xware )

目的

文字列の中の文字を変更したい!

StringBufferってなに?

文字列を扱うには、String クラスがありますが、String クラスでは、いったん作成したオブジェクトの内容を変更することが出来ません。そこで、文字列中の文字を変更するために StringBuffur クラス を使うと文字列中の内容を変更できることが出来ます。

StringBufferの説明

以下が StringBuffer クラスの主なメソッドの一部の例です。

StringBuffer append (char c)
引数の文字を追加します。
StringBuffer deleteCharAt (int index)
引数の位置の文字を削除します。
StringBuffer insert (int offset,char c)
引数の位置に文字を追加します。
int length ()
文字数を返します。
StringBuffer reverse ()
文字列を逆にします。

StringBufferの使い方

以下は、append () と、insert () を使ったプログラムの例です。
class Test{
	public static void main(String args[]){
StringBuffer sb1=new StringBuffer("TestCase"); StringBuffer sb2=new StringBuffer("TestCase2"); System.out.println(sb1); System.out.println(sb2); //append()メソッドを使っての文字列の変更 System.out.println(sb1.append("+are you happay?+")); System.out.println(sb1.append(sb2)); //insert()メソッドを使っての文字列の変更 System.out.println(sb1.insert(2, '-')); } }

実行結果になります。

TestCase
TestCase2 TestCase +are you happay?+ TestCase +are you happay?+TestCase2 Te-stCase +are you happay?+TestCase2

append () メソッドでは、文字列の最後に追加しています。一方、insert () メソッドでは、文字列の 2番目に「-」の文字を追加しています。java では文字列を数えるときには「0」番目から数えるので、2番目の「s」の文字の前に「-」が追加されています。

ポイント

ヒント

「+」演算子での文字列の連結

文字列バッファは、バイナリ文字列の連結演算子 + を実装するためにコンパイラで使用されます。

stringTest = "abcd" + "efgh" + "ijkl" ;

上記のコードは、以下の同等なコードとしてコンパイルされます。

stringTest = new StringBuffer().append("abcde").append(" efgh ").append("ijkl").toString();

上記のコードを見てわかるように、「+」 演算子で文字列を連結するとそのたびに新しい StringBuffer を new しています。 ループをまわして動的に大量の文字列を生成を行うと、パフォーマンスに若干の影響が出てきます。
 コンパイル後のコードの各行の最初と最後を見てみると、new と toString が記述されています。つまり「=」で変数に格納するとき StringBuffer と String のインスタンスをそれぞれ一つずつ生成していることになります。
 「+」演算子を使った文字列の連結というものにはさまざまなリスクを伴うので、文字列を直接操作する場合は StringBuffer を使用することが推奨されています。

処理スピードのパフォーマンス

文字列を連結するには String クラスと StringBuffer クラスがありますが、文字列の連結処理の効率が良いのは、StringBuffer クラスになります。
 StringBuffer クラスの実装では、保持されている内部バッファに 1 文字が追加されます。StringBuffer の場合、新たなオブジェクトが生成されるのは、バッファが一杯になって拡張が必要になった時だけになります。しかし、そのような状況はめったに起こりません。一方、String クラスは、複数のオブジェクトが生成されることになります。余計なオブジェクトを生成してしまうということは Java プログラムにとって深刻な問題になります。

関連


Copyright © 2003 - 2006 Okapi Project All Rights Reserved.