StringBuilderオブジェクトを初期化する
StringBuilder クラスのインスタンスを作成し利用したあと、格納されている文字列をいったんクリアして初期化したい場合があります。初期化するには新しい StringBuilder クラスのインスタンスを作成して代入してもできますが、 StringBuilder クラスで用意されている setLength メソッドや delete メソッドを使っても行うことができます。ここでは Java の StringBuilder オブジェクトを初期化する方法について解説します。
(Last modified: )
StringBuilderオブジェクトを初期化する
StringBuilder オブジェクトを作成し利用したあとで格納されている文字列をいったんすべてクリアして初期化し再度利用したい場合があります。
次のサンプルを見てください。
class JSample10_1{ public static void main(String[] args){ StringBuilder sb; for (int i = 0; i < 5; i++){ sb = new StringBuilder(); for (int j = 0; j < 5; j++){ sb.append((int)Math.ceil(Math.random() * 9)); } System.out.println(sb.toString()); } } }
このサンプルでは、 1 から 9 までの乱数を 5 回作成して StringBuilder オブジェクトに追加したあと、文字列に変換して画面に出力しています。それを 5 回繰り返しています。内側の繰り返しが終わるたびに新しい StringBuilder クラスのインスタンスを作成して変数に格納しなおすことで、 StringBuilder オブジェクトを初期化しています。
通常はこのようにインスタンスを毎回作成することで問題ないと思いますが、毎回インスタンスを作成することがパフォーマンス的に問題がでるケースもあるかもしれません。そこで毎回インスタンスを作成する以外の方法について 2 つご紹介します。(他の方法を使えば必ずパフォーマンスが良くなるというわけではありません。場合によっては他の方法の方がいい場合もあるので試してみる候補としてご紹介します)。
setLengthメソッドを使用する
ひとつめは StringBuilder クラスの setLength メソッドを使う方法です。詳しい使い方については「格納されている文字列の長さを変更する」を参照されてください。 setLength メソッドを使用すると StringBuilder オブジェクトに格納されている文字列の長さを変更することができます。そこで長さを 0 に設定することで格納されている文字列をクリアします。
次のサンプルを見てください。
class JSample10_2{ public static void main(String[] args){ StringBuilder sb = new StringBuilder(); for (int i = 0; i < 5; i++){ for (int j = 0; j < 5; j++){ sb.append((int)Math.ceil(Math.random() * 9)); } System.out.println(sb.toString()); sb.setLength(0); } } }
先ほどのサンプルと違い StringBuilder クラスのインスタンスを作成するのは一度だけです。そして内側の繰り返しが終了し、画面に出力を行ったあとで StringBuilder オブジェクトに格納されている文字列の長さを 0 にして StringBuilder オブジェクトを初期化しています。
deleteメソッドを使用する
もうひとつは StringBuilder クラスの delete メソッドを使う方法です。詳しい使い方については「指定範囲の部分文字列を削除する」を参照されてください。 delete メソッドを使用すると StringBuilder オブジェクトに格納されている任意の範囲の文字列を削除することができます。そこですべての文字を削除することで格納されている文字列をクリアします。
次のサンプルを見てください。
class JSample10_3{ public static void main(String[] args){ StringBuilder sb = new StringBuilder(); for (int i = 0; i < 5; i++){ for (int j = 0; j < 5; j++){ sb.append((int)Math.ceil(Math.random() * 9)); } System.out.println(sb.toString()); sb.delete(0, sb.length()); } } }
今回のサンプルも StringBuilder クラスのインスタンスを作成するのは一度だけです。そして内側の繰り返しが終了し、画面に出力を行ったあとで StringBuilder オブジェクトに格納されている文字列をすべて削除して StringBuilder オブジェクトを初期化しています。
いずれの方法であっても StringBuilder オブジェクトの初期化は行えます。先に記載したとおり通常は毎回インスタンスを作成することで問題ないと思いますが、どうしても問題が出てくる場合に別の方法を試してみてください。
-- --
Java の StringBuilder オブジェクトを初期化する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。