【Java言語】StringBuilderの使い方とメリット

Stringクラスの使い方は皆さんご存知だと思います。しかし、StringBuilderというクラスはご存知でしょうか?

名前は知っているけど使ったことがない
何をするためのクラスなの?
Stringクラスとはどう違うの?

といった疑問が出てくるかと思います。ここではそんな疑問を吹き飛ばしStringBuilderクラスの使い方やStringクラスとの違いを学び実際の開発で使えるようにしてみましょう!

ワンランク上のJavaプログラマを目指す方必見です!

StringBuilderとは

StringBuilderは、Java5.0(Tiger)で新しく導入されたクラスです。そのためそれ以前のバージョンのJava(~Java1.4(Merlin))では使用できないため注意が必要です!

StringBuilderは、一言でいうと、Stringクラス同様、文字列を扱うクラスです。Stringクラスでなく、StringBuildeクラスを使うというのはどのような時なのでしょうか?

まず、Stringクラスについて復習も兼ねてお話しましょう。

Stringクラスについて

Stringクラスの問題点

皆さんも一度は使ったことがあるStringクラスでの文字列扱いは以下の様な実装になります。

public class Main {
 
    public static void main(String[] args) {
    	for(int count = 0;  count  < 100; count++) {
            String cntval = Integer.toString(count);
            String result = "値は" + cntval;
            System.out.println(result);
    	}
    }
}

一見、何の問題もなく処理が動くように見られます。確かに問題なく実行できますがStringクラスが持つ、ある問題がここには潜んでいます。それは、「Stringクラスには一度セットした値を変更することはできない。」という問題です。

問題の原因

JavaのプログラムはVM(仮想マシン)というプログラムを実行するために必要な仕組みが存在します。

Javaでは変数を使用するために宣言を行いますが、宣言を行うことで値を保存しておくためのヒープ(保存スペース)をVMと呼ばれる仕組みの中に確保します。

前項のプログラムのようにループを用いて値をセットしていくような処理の場合、ループ処理で値がセットされる度にこの保存スペースが新しく作り直されます。

そのため無駄に保存スペースを食いつぶし処理速度の低下につながるという問題が起こります。100回、200回程度の処理ですと大した差ではありませんが数万件単位になるとその差は大きくなります。

StringBuilderを使う

そういったいくつかの問題を解決するためにStringBuilderを使ってみましょう。使い方については次のコードを見てみましょう。

class  SamuraiSample {
    public static void main(String[ ] args) {
        StringBuilder val = new StringBuilder();
        for(int count = 0; count < 100; count++) {
            String cntval = Integer.toString(count);
             val.append("値は" + cntval + "n" );
        }
        System.out.println(new String(val));
    }
}

このプログラムでは最初にStringBuilderのインスタンスを生成しています。for文内では数値を文字列に変換し生成しStringBuilderのインスタン変数valにappendメソッドを使って追加します。

全ての追加が終わった後、printlnメソッドを使い文字列を表示しています。大量に文字列を繋げていく場合にこのappendメソッドを使うことがポイントです!

このようにStringBuilderを使うことで必要最小限の保存スペースだけを使い文字列を連結することができる<のです。

StringBuilderとStringBuffer

StringBufferとは

次にStringBufferについてお話します。StringBufferもStringBuilder同様、文字列を扱うクラスです。StringBufferクラスもStringBuilderクラス同様、Stringクラスが扱えない可変長の文字列の扱いに適しています。

StringBufferとの違いは?

先程StringBufferについて「StringBuilder同様」と記載しましたが、「StringBufferとStringBuilderって何が違うの?」「どちらかひとつでいいじゃん!」と思う方もいるかもしれません。

もちろん、StringBuilder・StringBufferそれぞれのクラスの相違点はあります。一言でいうと、「StringBuilderはシングルスレッド(バッチ処理のような直列処理)向き」「StringBuffferはマルチスレッド(並列処理)向き」ということになります。

シングルスレッドやマルチスレッドについてよくわからないと思う方やStringBufferについては下記で詳しく使い方や違いを説明しています。ぜひ読んでみて下さい!

【5分で分かる】Java言語のStringBufferの使い方とStringBuilderとの違い
更新日 : 2020年9月28日

まとめ

StringBuilderについてお話させて頂きました。StringBuilderについてのおさらいです!

  • Java5.0 以降から使用可能
  • ループ内で文字列の操作(連結や挿入)を行いたいとき

にStringBuilderを使うと良いでしょう。「StringBuilderってなんだったっけ?」 と思ったらぜひこの記事を読み返してください!

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

荒井弥生