支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


当記事ではJavaを学習中の方に向けて、「StringBuilder」の意味や使い方についてご紹介します。

StringBuilderとは?

JavaのStringBuilderとは文字列を扱うクラスです。
文字列を扱うといえば「String」クラスがありますが、StringBuilderクラスとStringクラスはどういった違いがあるのでしょうか。
まず「String」クラスについて軽くご紹介します。

Stringクラスの特徴

JavaでStringクラスは頻繁に使用されていますが、intやcharのように基本データ型のように解釈している方もいらっしゃるのではないでしょうか?
StringはあらかじめJavaに用意されたクラスの1つで、「java.lang」というパッケージに格納されています。
Stringクラスの中身や仕組みについて詳しく解説すると長くなるので割愛させていただきますが、Stringクラスには、「一度代入した値を変更することができない」という特徴があります。

値を変更できないといっても、「String str = "いぬ";」の後に「str = "ねこ";」と書いて出力すると、「ねこ」と出力されます。
これを見ると値を変更できているのでは?と思うかもしれません。
表面上はそうなのですが、「"いぬ"」が消えて「"ねこ"」に書き換えられたわけではなく、代入時に「”いぬ”」を参照していたものが、「”ねこ”」を参照するようになったのです。

目に見えない部分なのでイメージしづらいかもしれまんが、例えば、「String str = "いぬ";」では、1111というメモリ領域を使用しているとします。「str = "ねこ";」では、1111というメモリ領域の内容を上書きするのではなく、「”ねこ”」という文字のために1234という新たなメモリ領域を確保し、strに代入します。
この時、1111の「"いぬ"」は残ったままです。
これが、「値を変更することができない」という言葉の意味です。
また、「String str = "いぬ" + "ねこ";」のように、文字列を連結しようとしても、同様に新しくメモリ領域を確保します。

でも別に表示上は問題ないんだから、いいんじゃないの?と思われるかもしれませんが、「"いぬ"」のために確保した1234は残り続けますので、余計なメモリ領域をくってしまい、処理の低下につながることがあります。

StringBuilder

前置きが長くなり申し訳ありませんが、そういった問題を解決するために「StringBuilder」クラスを使用します。
StringBuilderクラスでは主に以下のようなことが可能です。

  • ・文字列の挿入
  • ・文字列の結合
  • ・文字列の部分置換
  • ・文字列の部分削除
  • ・文字列の部分取り出し
  • ・文字列の検索

ではStringBuilderの使い方をご紹介いたします。

public class Test {
  public static void main(String[] args) {
  StringBuilder sb = new StringBuilder();

  }
}

StringBuilderを使用する際の基本はまずこの形です。以下のように引数に文字列を渡しておくことも可能です。

public class Test {
  public static void main(String[] args) {
  StringBuilder sb = new StringBuilder("ABCDEFG");

  }
}

StringBuilderクラスをインスタンス化し、そこから様々なメソッドを使用していきます。

文字列を追加する

文字列を追加するには「append」メソッドを使用します。

public class Test {
  public static void main(String[] args) {
  StringBuilder sb = new StringBuilder("ABC");
  System.out.println(sb.append("D"));
  }
}

出力結果

ABCD

appendメソッドは、既存の文字列の後ろに文字を追加します。

文字列を削除する

文字列を削除するには「delete」メソッドを使用します。

public class Test {
  public static void main(String[] args) {
  StringBuilder sb = new StringBuilder("ABCDEFG");
  System.out.println(sb.delete(0,3));
  }
}

出力結果

DEFG

deleteメソッドは、1つめの引数で指定した個所を起点に、2つめの引数で指定した場所の手前までを削除します。
上記の例ですと、「ABCDEFG」の位置を示す値は「0123456」となっています。
sb.delete(0,3)とは、「文字列の0番目であるAから3番目であるDの手前までを削除」という意味となります。
3番目までを削除ではないので注意しましょう。

文字列を指定した位置に挿入する

appendは文字列の最後でしたが、特定の位置に文字列を挿入したい場合は「insert」メソッドを使用します。

public class Test {
  public static void main(String[] args) {
  StringBuilder sb = new StringBuilder("ABCDEFG");
  System.out.println(sb.insert(2,"インサート"));
  }
}

出力結果

ABインサートCDEFG

文字列を置換する

文字列を置換するには「replace」メソッドを使用します。

public class Test {
  public static void main(String[] args) {
  StringBuilder sb = new StringBuilder("ABCDEFG");
  System.out.println(sb.replace(2,4,"abc"));
  }
}

出力結果

ABabcFG

第一引数に置換の始点、第2引数に置換の終点、第3引数に置換後の文字を指定します。

StringBuilderには他にも様々なメソッドがありますので、必要に応じて利用していきましょう。

最後に

以上がJavaにおけるStringBuilderについての解説となります。
Javaに限らずプログラミングの学習は実際に書くことが大切ですので、実際にエディタでStringBuilderを使用し動作を確かめていきましょう。