Java入門|StringBufferで文字列を追加する方法

文字列をつなぎ足せるようになると、Javaの表現力はぐっと広がる

これまで文字列を扱うときには、主に Stringクラス を使ってきました。Stringクラスはとても便利で、文字数を調べたり、一部を取り出したり、検索したりと、さまざまな操作ができます。ただし、ひとつ大事な特徴があります。それは、いったん作成した文字列の内容をそのまま書き換えることができないという点です。

たとえば、すでにある文字列の後ろに別の文字列を追加したい、途中に文字を差し込みたい、一部を書き換えたいといった場面では、Stringクラスだけでは少し扱いにくいことがあります。そんなときに役立つのが StringBufferクラス です。StringBufferクラスは、文字列の内容を変えながら扱えるクラスで、追加や挿入、置換などの操作がしやすくなっています。

ここでは、StringBufferクラスの基本的な考え方から、append() メソッドを使って文字列を追加する方法まで、やさしく整理しながら見ていきます。さらに、Stringクラスとの違いや、StringBufferクラスでよく使われるほかのメソッドについても、いっしょに確認していきましょう。

StringクラスとStringBufferクラスの違い

まずは、StringBufferクラスを理解するために、Stringクラスとの違いを押さえておきましょう。

Stringクラスは、文字列を扱うための基本クラスです。ただし、作成後に中身を変更することはできません。これに対して、StringBufferクラスは、作成したあとで文字列の内容を変更できます。

この違いを表で整理すると、次のようになります。

クラス名特徴向いている場面
String作成した文字列の内容を変更できない文字列をそのまま扱うとき
StringBuffer作成した文字列の内容を変更できる文字列を追加・変更・削除したいとき

つまり、Stringクラスは固定された文字列を扱うのが得意で、StringBufferクラスは変化する文字列を扱うのが得意です。

なぜStringBufferが必要なのか

文字列を扱うプログラムでは、あとから内容を変えたい場面がよくあります。

たとえば、次のようなケースです。

やりたいこと
後ろに文字列を追加したいおはよう に ございます を追加する
途中に文字を入れたい東京駅 に 前 を入れて 東京駅前 にする
一部を別の文字列に変えたい2025年 を 2026年 に変える
文字を削除したい余分な記号を取り除く

こうした処理を何度も行う場合、StringBufferクラスを使うと、より自然な形で書けます。

StringBufferクラスのオブジェクトを作る

StringBufferクラスのオブジェクトは、文字列をもとに作ることができます。

たとえば、次のように書きます。

StringBuffer sb = new StringBuffer("こんにちは");

このコードでは、こんにちは という文字列をもとにして、StringBuffer型のオブジェクトを作っています。ここで作られた sb に対して、文字列の追加や変更ができるようになります。

append() メソッドで文字列を追加する

StringBufferクラスで最初に覚えたいのが append() メソッドです。append() は、文字列の末尾に新しい文字や文字列を追加するメソッドです。

書き方は次のようになります。

sb.append("追加したい文字列");

たとえば、もとの文字列が おはよう で、そこに ございます を追加すると、おはようございます になります。

このメソッドはとても使いやすく、文字列を順番につなげていきたいときに便利です。

シンプルなプログラムで確認しよう

ファイル名:Sample4.java

import java.io.*;

class Sample4
{
    public static void main(String[] args) throws IOException
    {
        // キーボード入力の準備をする
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));

        // 元になる文字列を入力してもらう
        System.out.println("最初の言葉を入力してください。");
        String str1 = br.readLine();

        // 追加する文字列を入力してもらう
        System.out.println("続けて追加する言葉を入力してください。");
        String str2 = br.readLine();

        // StringBufferオブジェクトを作成する
        StringBuffer sb = new StringBuffer(str1);

        // 文字列を追加する
        sb.append(str2);

        // 結果を表示する
        System.out.println("つなげた結果は「" + sb + "」です。");
    }
}

このプログラムでは、最初の文字列を入力し、そのあとで追加したい文字列を入力しています。そして、StringBufferクラスの append() を使って、後ろに文字列を追加しています。

たとえば、次のように入力したとします。

最初の言葉を入力してください。
おはよう
続けて追加する言葉を入力してください。
ございます

この場合、表示結果は次のようになります。

つなげた結果は「おはようございます」です。

とてもシンプルですが、StringBufferクラスの基本がよく分かる例です。

プログラムの流れを整理しよう

このプログラムの動きを順番に見ると、StringBufferの役割がよりはっきり見えてきます。

順番処理内容説明
1文字列を2つ入力する元の文字列と追加する文字列を受け取る
2new StringBuffer(str1)最初の文字列をもとにStringBufferを作る
3sb.append(str2)後ろに文字列を追加する
4結果を表示する追加後の内容を確認する

ここで大事なのは、append() が sb の中身を変化させているという点です。Stringクラスでは新しい文字列を別に作るイメージが強いですが、StringBufferでは同じオブジェクトの内容を変えていけます。

append() の動きをイメージで理解しよう

append() の動きは、文字列の末尾に新しい内容をつなぎ足すイメージです。

たとえば、

  • 元の文字列:今日も
  • 追加する文字列:がんばろう

であれば、append() の結果は

  • 今日もがんばろう

になります。

表にすると、次のように見られます。

元の内容追加する内容append() 後の内容
今日もがんばろう今日もがんばろう
の風春の風
Java学習中Java学習中

このように、append() はとても素直な動きをするので、最初に覚えるメソッドとしてぴったりです。

Stringは変更できない、StringBufferは変更できる

ここは特に大切なポイントなので、もう一度整理しておきましょう。

Stringクラスでは、いったん作られた文字列の中身をそのまま変更することはできません。これに対して、StringBufferクラスでは中身を変更できます。

この違いをイメージで表すと、次のようになります。

クラス文字列の扱い
String固定された文字列
StringBuffer変化できる文字列

そのため、文字列を何度もつなげたり、内容を少しずつ作っていったりする処理では、StringBufferが役立ちます。

StringBufferクラスの主なメソッド

StringBufferクラスには、append() 以外にも便利なメソッドがいろいろあります。ここで主なものを整理しておきましょう。

メソッド名機能
append(char c)文字を追加する
append(String str)文字列を追加する
deleteCharAt(int index)指定位置の文字を削除する
insert(int offset, char c)指定位置に文字を追加する
insert(int offset, String str)指定位置に文字列を追加する
length()文字数を返す
replace(int start, int end, String str)一部を別の文字列に置き換える
reverse()文字列を逆順にする
setCharAt(int index, char ch)指定位置の文字を変更する
toString()String型に変換する

この表を見ると、StringBufferクラスがかなり幅広い文字列操作に対応していることが分かります。

append() 以外の活用イメージも見てみよう

append() を覚えたあとには、ほかのメソッドにも自然につながっていきます。

たとえば、次のような使い方が考えられます。

やりたいこと使うメソッド
末尾に追加したいappend()
途中に差し込みたいinsert()
一部を書き換えたいreplace()
1文字だけ変えたいsetCharAt()
並びを逆にしたいreverse()

つまり、StringBufferクラスは、文字列編集のための道具箱のような存在だと考えると分かりやすいです。

toString() が必要になる場面

StringBufferクラスで操作した内容を、最後にString型として扱いたいことがあります。そんなときに使うのが toString() です。

たとえば、次のように書けます。

String result = sb.toString();

これで、StringBufferの内容を普通のString型の文字列に変えられます。

Javaでは、画面表示のときにはそのまま sb を使っても文字列として見えますが、変数として String型 に入れたいときには toString() を使うと分かりやすいです。

StringBufferクラスの append() は、図にするととても理解しやすい内容です。もとの文字列の後ろに、新しい文字列がつながって、ひとつの長い文字列になる流れを視覚的に表せるからです。

この図は、左側の元の文字列 おはよう と、右側の追加する文字列 ございます が、中央の append() を通して、下部の おはようございます という結果につながる流れを表しています。これにより、append() が文字列の末尾に内容を追加するメソッドであることが視覚的に理解しやすくなります。

また、補足として Stringクラスでは内容を直接変えられないのに対して、StringBufferクラスでは文字列を追加できることも示しておくと、なぜStringBufferを使うのかがよりはっきり伝わります。

実務や学習でどう役立つのか

StringBufferクラスは、次のような場面で役立ちます。

場面活用例
メッセージを順番に組み立てるあいさつ文を少しずつ作る
入力結果をつなげる名前と敬称を結合する
編集しながら文字列を作る一部を変えつつ文章を整える
複数の文字列をまとめる順番に追加して1つの結果にする

特に、文字列を何度もつなげる処理では、StringBufferクラスの考え方を知っておくと、文字列操作への理解がぐっと深まります。

よくある注意点

StringBufferクラスを使うときには、次の点を意識しておくと分かりやすいです。

注意点内容
Stringとは別のクラス使い方が少し違う
new StringBuffer(...) で作る最初にオブジェクト作成が必要
append() は末尾に追加する途中ではなく後ろにつく
必要なら toString() を使うString型に戻したいときに使う

特に、StringクラスとStringBufferクラスは同じ「文字列を扱うクラス」でも性質が違うので、そこを混同しないことが大切です。

StringBufferクラスを理解すると、文字列はただ表示するだけのものではなく、あとから組み立てたり編集したりできるデータだという感覚が身についてきます。append() メソッドはその入口としてとても分かりやすく、今後の文字列操作を広げる大事な一歩になります。