カテゴリ: Java 更新日: 2026/06/25

JavaのStringBuilderクラスを完全ガイド!初心者でもわかる文字列操作の基本

StringBuilderクラス
StringBuilderクラス

先生と生徒の会話形式で理解しよう

生徒

「Javaで文字列を効率的に操作する方法って何かありますか?」

先生

「良い質問ですね!文字列を効率的に操作したい場合はStringBuilderクラスを使うのがおすすめです。」

生徒

「Stringクラスと何が違うんですか?」

先生

「Stringクラスは不変(Immutable)ですが、StringBuilderクラスは可変(Mutable)です。そのため、文字列操作が高速になるんですよ。詳しく見ていきましょう!」

1. StringBuilderクラスとは?Stringとの違いを徹底解説

1. StringBuilderクラスとは?Stringとの違いを徹底解説
1. StringBuilderクラスとは?Stringとの違いを徹底解説

Javaでプログラミングをしていると、必ず「文字列」を扱う場面が出てきます。多くの初心者は、文字列を作る際にStringクラスを使いますが、実はStringには「一度作った中身は絶対に変えられない(不変性)」という特徴があります。

例えば、Stringで文字列を何度もつなげようとすると、そのたびにJavaは新しいメモリ空間を確保し、新しい文字列オブジェクトを作り直してしまいます。これは、100回、1000回と処理を繰り返すと、コンピュータの動作を重くする原因(パフォーマンス低下)になります。

そこで登場するのがStringBuilderクラスです。StringBuilderは「可変(Mutable)」なクラスで、同じ箱の中身を直接書き換えるイメージで動作します。新しいオブジェクトをいちいち作らないため、メモリに優しく、圧倒的に高速な処理が可能です。

ここがポイント: 「使い捨ての文字列をたくさん作るのがString」、「一つの文字列をどんどん加工していくのがStringBuilder」と覚えましょう。

どれくらい違う?イメージで理解するサンプル

プログラミング未経験の方でもわかりやすいように、1から10までの数字をつなげて一つの文章にする処理を考えてみましょう。


public class WhyStringBuilder {
    public static void main(String[] args) {
        // StringBuilderを準備する(中身は空っぽの状態)
        StringBuilder message = new StringBuilder();

        // 1から10まで順番に数字をくっつけていく
        for (int i = 1; i <= 10; i++) {
            message.append(i).append("番目 "); 
        }

        // 最後にまとめて表示!
        System.out.println(message.toString());
    }
}

実行結果:


1番目 2番目 3番目 4番目 5番目 6番目 7番目 8番目 9番目 10番目 

このように、一つのStringBuilderオブジェクト(message)に対して、appendという命令を使ってどんどん後ろに付け足していくことができます。この方法は、特にループ処理(繰り返し作業)の中で文字列を組み立てる際に最強の威力を発揮します。

以下の場面では、迷わずStringBuilderを選びましょう:

  • SNSの投稿一覧: たくさんの投稿文を一つのページ用に連結するとき。
  • ログ出力: システムの動作記録を一行ずつ追加していくとき。
  • 検索結果の組み立て: 複雑な条件を組み合わせて検索文を作るとき。

2. StringBuilderの基本的な使い方とメソッド解説

2. StringBuilderの基本的な使い方とメソッド解説
2. StringBuilderの基本的な使い方とメソッド解説

Javaで文字列を効率よく操作するための「StringBuilder」クラス。プログラミング初心者の方でもすぐに使える、最も基本的な書き方と主要なメソッドを分かりやすく解説します。

文字列を結合する(appendメソッド)

StringBuilderの最大の特徴は、元のデータを壊さずに後ろへ文字をどんどん付け足していけることです。まずは、最もよく使われる「append」メソッドのサンプルコードを見てみましょう。


public class StringBuilderExample {
    public static void main(String[] args) {
        // 1. StringBuilderのインスタンスを作成(初期値を設定)
        StringBuilder sb = new StringBuilder("こんにちは");

        // 2. appendメソッドで文字列を後ろに追加
        sb.append("、世界!");
        sb.append("Javaの学習を楽しもう。");

        // 3. 最後にtoString()でString型に変換して出力
        System.out.println(sb.toString());
    }
}

実行結果:


こんにちは、世界!Javaの学習を楽しもう。
ここがポイント!
通常のString型で「+」記号を使って文字列を連結すると、裏側で新しいインスタンスが何度も作られ、動作が重くなる原因になります。しかし、StringBuilderを使えば、一つの領域(バッファ)内で直接文字を書き換えるため、メモリ消費を抑えて高速に処理できるのがメリットです。

上記の例では、appendメソッドを使って、複数の文字列をスムーズに結合しました。初心者の方は「まずはappendを覚える」だけで、文字列操作の効率が劇的に上がりますよ。

3. StringBuilderでよく使う!append以外の便利なメソッド

3. StringBuilderでよく使う!append以外の便利なメソッド
3. StringBuilderでよく使う!append以外の便利なメソッド

JavaのStringBuilderには、文字を末尾に追加するappend以外にも、編集作業を劇的に楽にするメソッドが備わっています。これらをマスターすると、複雑な文章の組み立てやデータの加工が驚くほど簡単になります。ここでは、特によく使われる4つの操作を初心者の方にも分かりやすく解説します。

  • insert(挿入):指定した場所に、ピンポイントで文字を割り込ませます。
  • delete(削除):不要な部分を範囲指定して、スッキリ消し去ります。
  • replace(置換):一部の文字を、別の新しい言葉に書き換えます。
  • reverse(反転):文字の並びを右から左へ、一瞬でひっくり返します。

プログラミング未経験の方でもイメージしやすいよう、「Hello」という言葉を加工して「!avaJ ,olleH」という実行結果になるまでの流れをコードで見てみましょう。


public class AdvancedStringBuilderExample {
    public static void main(String[] args) {
        // 1. 最初に「Hello」という土台を作ります
        StringBuilder sb = new StringBuilder("Hello");

        // 2. 5番目の位置(Helloの直後)に「, World!」を挿入
        sb.insert(5, ", World!"); 
        // 状態:Hello, World!

        // 3. 7番目から12番目未満(World)を「Java」に置き換え
        sb.replace(7, 12, "Java"); 
        // 状態:Hello, Java!

        // 4. 全体の並びを逆順にする
        sb.reverse(); 
        // 状態:!avaJ ,olleH

        // 最後に画面に表示します
        System.out.println(sb.toString());
    }
}

実行結果:


!avaJ ,olleH

このように、StringBuilderを使えば元の文字列を自由自在に作り変えることができます。 特に「文章の途中に特定のデータを差し込みたい」ときはinsert、「間違った入力を修正したい」ときはreplaceが非常に役立ちます。 まずはこのサンプルをコピーして、数字を変えてみることから始めてみましょう。

4. StringBuilderを使う際の注意点と使い分け

4. StringBuilderを使う際の注意点と使い分け
4. StringBuilderを使う際の注意点と使い分け

非常に便利なStringBuilderですが、プログラミングの世界には「これさえあれば完璧」という道具はありません。初心者の方が特につまずきやすい、2つの注意点を確認しておきましょう。

① 「スレッド」という同時作業に弱い

Javaには、複数の処理を同時に進める「マルチスレッド」という仕組みがあります。StringBuilderは、一人で作業する分には高速ですが、複数の人が同時に同じ書き込みをしようとすると、中身がぐちゃぐちゃになってしまうという弱点があります。

もし、複数の処理から同時にアクセスされるプログラムを作る場合は、動作が少しゆっくりになりますが、安全に交通整理をしてくれるStringBuffer(ストリングバッファ)を使いましょう。

② メモリの「空き容量」に注意

StringBuilderは、効率よく文字をつなげるために、あらかじめ内部に「作業用の空きスペース」を確保しています。しかし、何万行、何十万行という膨大なテキストを扱う場合、この空きスペースがパソコンのメモリ(記憶領域)を圧迫してしまうことがあります。

イメージ図:

初心者の方は、まずは以下のコードを参考に「安全な使い方」のイメージを掴んでみてください。


public class StringBuilderSafety {
    public static void main(String[] args) {
        // 基本的にはStringBuilderでOK!
        StringBuilder sb = new StringBuilder();
        sb.append("基本の学習では");
        sb.append("StringBuilderを使えば間違いありません。");
        
        System.out.println(sb.toString());

        // もし「複数の処理から同時に触る」ような高度なプログラムなら…
        // StringBuffer safeSb = new StringBuffer(); 
        // のように使い分けます。
    }
}

「一人で使うならStringBuilder、みんなで使うならStringBuffer」と覚えておけば、2026年のモダンな開発現場でも役立つ知識になりますよ。

5. まとめ

5. まとめ
5. まとめ

今回の記事では、JavaのStringBuilderクラスについて詳しく解説しました。このクラスを使うことで、文字列操作を効率的に行えるようになります。特に大量の文字列を連結する場合や、文字列を頻繁に変更するようなシナリオで大きな効果を発揮します。

StringBuilderの基本的なメソッド(append、insert、replaceなど)を活用することで、柔軟な文字列操作が可能になります。また、Stringクラスとの違いとして、「可変性」がポイントであることも理解していただけたと思います。

以下に、これまで学んだことを総括するサンプルプログラムを示します。


public class SummaryStringBuilderExample {
    public static void main(String[] args) {
        // StringBuilderの使用例
        StringBuilder sb = new StringBuilder("Java Programming");
        
        // 文字列を追加
        sb.append(" is fun!");
        
        // 指定位置に文字列を挿入
        sb.insert(5, " Language");
        
        // 一部を置換
        sb.replace(0, 4, "Learning");
        
        // 文字列を逆順に
        sb.reverse();
        
        // 結果を表示
        System.out.println(sb.toString());
    }
}

実行結果:


!nuf si egaugnaL gninraeL

このように、StringBuilderを活用することで、文字列操作を効率的かつ直感的に行えるようになります。

先生と生徒の振り返り会話

生徒

「今日はStringBuilderについて色々と学べてよかったです!」

先生

「そうですね。StringBuilderを活用すると、文字列操作の効率が大幅に向上します。特にappendやreplace、reverseのようなメソッドはよく使うので、ぜひ覚えておきましょう。」

生徒

「マルチスレッド環境ではStringBufferを使うのがいいという点も気をつけたいですね!」

先生

「その通りです。状況に応じてStringBuilderとStringBufferを使い分けることが重要です。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

JavaのStringBuilderクラスとは、具体的にどのような役割を持つクラスなのですか?初心者にもわかりやすく教えてください。

JavaのStringBuilderクラスは、文字列の結合や変更を効率的に行うための専門的なツールです。プログラミングの初心者の方がよく使うStringクラスは、一度作成すると中身を変えられない「不変(Immutable)」という性質を持っていますが、StringBuilderは中身を自由に変更できる「可変(Mutable)」な性質を持っています。そのため、大量の文字列を繋げたり、中身を頻繁に書き換えたりするようなプログラムを書く際に、メモリの消費を抑えて動作を高速化させるという重要な役割を担っています。

Javaプログラミングにおいて、通常のStringクラスとStringBuilderクラスの決定的な違いは何でしょうか?

最大の違いは、オブジェクトが作成された後に「中身を変更できるかどうか」という点にあります。Stringクラスで文字列を連結しようとすると、実は元の文字列が書き換わっているのではなく、連結後の新しい文字列オブジェクトがその都度メモリ内に作成されています。これに対してStringBuilderクラスは、ひとつのオブジェクトの中で直接文字を追加したり削除したりするため、新しいオブジェクトを何度も作り直す必要がありません。この「可変性(ミュータブル)」の違いが、処理速度や効率性の差に繋がります。

なぜStringクラスではなく、StringBuilderクラスを使うと文字列操作の処理が高速になるのですか?

Stringクラスで文字列を何度も連結(プラス演算子などを使用)すると、その回数分だけ新しいメモリ領域が確保され、古いデータがコピーされるという無駄な処理が発生します。これが数千回、数万回と繰り返されると、パソコンの動作が重くなる原因になります。一方、StringBuilderクラスは「同じバッファ(メモリ領域)」内で直接データを書き換える設計になっているため、メモリの確保やコピーの回数が劇的に少なくなります。その結果、特にループ処理などでの文字列操作において、圧倒的なパフォーマンスの向上と高速化を実現できるのです。
生成AIを基礎から学びたい方へ

ChatGPTなどの生成AIをこれから学びたい方に向けて、AIスキルアカデミーの口コミ・評判、料金、無料セミナーの内容を詳しくまとめています。

AIスキルアカデミーの口コミ・評判を詳しく見る
カテゴリの一覧へ
新着記事
New1
Java
JavaのassertFalseとは?JUnit5のAssertionsクラスを初心者向けにわかりやすく解説
新規投稿
New2
Thymeleaf
ThymeleafでDBから取得したデータを編集フォームの初期値にセットする方法!Entity連携を初心者向けに解説
新規投稿
New3
Spring
JavaのSpringで使う@FutureOrPresentアノテーションを完全ガイド!初心者でもわかる日付バリデーション
新規投稿
New4
Java
JavaのLocalDateクラスのgetMonthValueメソッド完全ガイド!初心者でもわかる数値で月を取得する方法
新規投稿
人気記事
No.1
Java&Spring記事人気No1
Servlet
JavaサーブレットのdoPostメソッドとは?初心者向けにやさしく解説!
No.2
Java&Spring記事人気No2
Servlet
JavaのHttpServletResponseクラスを初心者向けに徹底解説!
No.3
Java&Spring記事人気No3
Servlet
JavaのHttpServletRequestWrapperとgetSessionメソッドの使い方を徹底解説!初心者向けServletのセッション管理入門
No.4
Java&Spring記事人気No4
Servlet
JavaのServletExceptionクラスを初心者向けに徹底解説!
No.5
Java&Spring記事人気No5
Servlet
JavaのHttpSessionインターフェースとgetSessionContextメソッドを徹底解説!初心者でもわかるセッション管理の基本
No.6
Java&Spring記事人気No6
Java
JavaのStringクラスとlengthメソッドを完全解説!初心者でも理解できる文字列の長さ取得の使い方
No.7
Java&Spring記事人気No7
Servlet
JavaのHttpSessionAttributeListenerとattributeRemovedメソッドの使い方を徹底解説!初心者でもわかるセッション属性の削除と監視
No.8
Java&Spring記事人気No8
Java
Javaのクラスとインスタンス化、コンストラクタの使い方完全ガイド!初心者でもわかるオブジェクト指向の基礎