文字列を追加する(append)

広告

まずStringBuilderクラスの使い方から見ておきます。Stringクラスを使って文字列を連結するというのは例えば下記のようなことです。

String str = "abc" + "def" + "ghi";

Stringクラスのオブジェクトである文字列は、「+」演算子を使って文字列と文字列をつなげることが出来ます。上記の場合であれば「abc」という文字列に「def」という文字列を最後に追加した新しい文字列を作成します。さらにその新しい文字列の最後に「ghi」とい文字列を追加して新しい文字列を作成しています。

これはStringクラスが本来固定長であるためで、一度作成した文字列に後から文字を追加することが出来ないため、2つの文字列を結合した値を持つ新しい文字列を作成しているわけです。これに対してStringBuilderクラスは可変長の文字列を扱うクラスで、新しくオブジェクトを作成することなく随時文字列を追加することが出来ます。

その為、文字列を連結する処理が多い場合には、最初からStringBuilderクラスで文字列の連結を行っておき、最後にStringBuilderクラスのオブジェクトからStringクラスのオブジェクトを作成することで効率よく文字列の連結が行えます。

ここではまず作成したStringBuilderクラスのオブジェクトに文字列を追加するためのメソッドを確認します。

指定された文字列をこの文字シーケンスに追加します。

String 引数の文字が、順番にこのシーケンスに追加されます。その結果、引数の長さの分だけこの
シーケンスの長さが増えます。str が null の場合、"null"の 4 文字が追加されます。

パラメータ:
  str - 文字列 
戻り値:
  このオブジェクトへの参照

現在StringBuilderクラスのオブジェクトに格納されている文字列の最後に引数で指定した文字を追加します。StringBuilderクラスのオブジェクトの作成から文字列の追加、そして最後にStringクラスの作成までの一連の流れは下記のようになります。

StringBuilder sb = new StringBuilder();
sb.append("abc");
sb.append("def");
sb.append("ghi");

Strint str = new String(sb);  // "abcdefghi"

上記のappendメソッドの引数はString型となっていますが、同じメソッドで引数の型が違うメソッドが用意されています。

StringBuilder append(boolean b)
StringBuilder append(char c)
StringBuilder append(char[] str)
StringBuilder append(char[] str, int offset, int len)
StringBuilder append(CharSequence s)
StringBuilder append(CharSequence s, int start, int end)
StringBuilder append(double d)
StringBuilder append(float f)
StringBuilder append(int i)
StringBuilder append(long lng)
StringBuilder append(Object obj)
StringBuilder append(StringBuffer sb)

String型以外の値の場合は、いったん文字列表現の形に変更されてから追加されて行きます。ほとんどの型について用意されていますので、あまり型を気にすることなく値を追加していく事が出来ます。(文字列の「+」の連結で文字列と数字の連結なども出来るのはこのためです)。

サンプルプログラム

では実際に試してみましょう。

testStringBuilder1.java

class testStringBuilder1{
  public static void main(String args[]){
    dispHantei("山田", 89);
    dispHantei("鈴木", 45);
    dispHantei("伊藤", 67);
    dispHantei("加藤", 92);
  }

  private static void dispHantei(String name, int tokuten){
    StringBuilder sb = new StringBuilder();

    sb.append(name);
    sb.append("さんの成績は");
    sb.append(tokuten);
    sb.append("点です。結果は");
    if (tokuten > 75){
      sb.append("合格");
    }else{
      sb.append("不合格");
    }
    sb.append("です。");

    System.out.println(new String(sb));
  }
}

上記を実際にコンパイルして実行してみると下記のようになります。

p1

( Written by Tatsuo Ikura )