東大ニート

東大卒のニートが勉強したことをメモするブログ

<Java>StringBuilderクラスの使い方

今日ある問題を解いていたら、文字列の一部を変更する処理を行いたい場面がありました。このような場合にはStringクラスではなく、StringBuilderクラスが適しているんですね。(StringBufferクラスとの違いについてはまた今度…)

勉強した内容をメモしていきます。

こちらのサイトを参考にさせていただきました。

StringBuilderを使用した文字列操作 - Javaちょこっとリファレンス

 

StringBuilderインスタンスの作成

例えば以下のコードを実行すると

  1. public class Main {

  2.        public static void main(String args[] ) {

  3.               StringBuilder sb = new StringBuilder();

  4.               String s = "test";

  5.               sb.append(s);

  6.               for (int i = 0; i < sb.length(); i++) {

  7.                      System.out.println(sb.charAt(i));

  8.               }

  9.               System.out.println(sb);

  10.        }

  11. }

以下の結果が出力されます。

t
e
s
t
test

 ポイント1. インポートは不要

StringBuilderクラスはjava.langパッケージに含まれるため、インポート不要です。

ポイント2. StringBuilderインスタンスの作成(3行目)

StringBuilderインスタンスの作成は「StringBuilder sb = new StringBuilder();」のように記述します。なんの変哲もありません。

 

StringBuilderクラスのメソッド

上記のコード例では「append」メソッド(5行目)や「length」メソッド(6行目)、「charAt」メソッド(7行目)を使用しています。

代表的なメソッドは以下の通りです。
※記述例ではStringBuilderインスタンス「sb」への処理を想定して記載しています。

  • append

文字列の最後に指定した文字列を結合します。
文字列「"test"」を追加する場合は「sb.append("test");」と記述します。

  • insert

指定した箇所に文字列を挿入します。
2文字目から文字列「"aaa"」を挿入する場合は「sb.insert(1, "test");」と記述します。

  • replace

指定した範囲の文字列を置換します。
1文字目から4文字目から文字列「"bbb"」に置換する場合は「sb.replace(0, 4, "bbb");」と記述します(置換する文字列と置換対象の文字列の長さは異なって構いません)。

  • setCharAt

指定した1文字を置換します。
3文字目を文字「'c'」に置換する場合は「sb.setCharAt(2, 'c')」と記述します(置換する文字も1文字となります)。

  • delete

指定した範囲を削除します。
3文字目から5文字目まで消したい場合はsb.delete(2, 5);」と記述します。

  • deleteCharAt

指定した1文字を削除します。
2文字目を消したい場合はsb.deleteCharAt(1);」と記述します。

  • substring

指定した範囲の文字列を取得します。
1文字目から4文字目まで取得したい場合はsb. substring(0, 4);」と記述します。
また、2つ目の引数を指定しなければ、文字列の最後まで取得します。例えば3文字目以降を全て取得したい場合はsb. substring(2);」と記述します。

  • indexOf

文字列を先頭から検索し、最初に出現する箇所のindexを返します。
文字列「"Japan"」が最初に出現するindexを検索したい時は「sb.indexOf("Japan");」と記述します。
また、このメソッドでは検索開始するindexを指定できます。例えば、3文字目以降で探したい場合は「sb.indexOf("Japan", 2);」と記述します。

  • lastIndexOf

indexOfと似ていますが、文字列を最後から検索し、最初に出現する箇所のindexを返します。
文字列「"Korea"」のindexを後ろから検索したい時は「sb.lastIndexOf("Korea");」と記述します。
また、このメソッドでは検索開始するindexを指定できます。例えば、7文字目以前で探したい場合は「sb.lastIndexOf("Korea", 6);」と記述します。

  •  reverse

文字列の並びを反転させます。「sb.reverse();」と記述します。

  • toString

StringBuilderをStringに変換します。「sb.toString();」と記述します。

  • length

文字列の文字数を取得します。「sb.length();」と記述します。

 

以上になります。文字列を変更したい時はStringBuilderクラスが便利ですね。