MENU

【Java Silver】文字列操作と StringBuilder クラスの理解

今回は、Javaの文字列操作について学びましょう。

問題

次のプログラムは、文字列の操作に関するものです。このコードを実行した場合に出力される結果を選んでください。

public class StringBuilderExample {
                public static void main(String[] args) {
                    StringBuilder sb = new StringBuilder("Hello");
                    sb.append(" World");
                    sb.insert(0, "Java");
                    sb.delete(4, 8);
                    System.out.println(sb.toString());
                }
            }

選択肢

  • A. JavaHello World
  • B. Java World
  • C. Javao World
  • D. Hello World

答えと解説

回答を見る

答え

C. Javao World

解説

StringBuilderクラスを使用すると、文字列を効率的に操作できます。ここでは次のように操作しています:

  • 最初にStringBuilderオブジェクトsbが”Hello”で初期化されます。
  • appendメソッドで、” World”が追加されます。
  • insertメソッドにより、先頭に”Java”が挿入されます。
  • deleteメソッドで、インデックス4から8までの文字(”avaH”)が削除されます。

これにより、最終的に”JavaHello World”から”AvaHello World”が削除され”Javao World”が残ります。

このプログラムのポイントは、StringBuilderのメソッドを使った文字列の変形能力に焦点を当てています。文字列を効率よく操作できるため、多くの場面でStringBuilderは役に立ちます。

基本説明

Javaで文字列を扱う際、一般的にStringクラスが使用されますが、Stringオブジェクトは不変(immutable)です。つまり、一度作成されたStringオブジェクトは変更できません。

これに対してStringBuilderクラスは可変(mutable)で、効率的に文字列を操作できます。appendは文字列の結合、insertは指定位置への挿入、deleteは文字列内の削除を行います。

誤答理由

誤答が生じやすいのは、insertdeleteの範囲や動作に対する理解不足です。まず、insert(0, "Java")は文字列の最初に”Java”を挿入します。そして、delete(4, 8)はインデックス4から7までを削除します。

この範囲指定は閉区間ではなく、開始インデックスを含み、終了インデックスを含まない点が重要です。多くの誤解はこの区間指定から生じます。

つまずきポイント

つまずくポイントは、メソッドの使い方とその結果による変形の理解不足です。特にdeleteメソッドを使う際、その範囲の理解が大切です。

たとえば、贈り物を包む紙を想像してください。insertは包装紙に何かを書き込む行為に似ています。そしてdeleteは、それをハサミで切り取る行為と考えると分かりやすいです。

発展知識

StringBuilderの利点は、その効率性にあります。例えば、文字列結合を繰り返す操作では、StringよりもStringBuilderを使う方がはるかにパフォーマンスが良いです。

また、StringBuilderにはreverseという文字列を反転するメソッドや、capacityでバッファの容量を確認することもできます。これらの機能を駆使することで、より効果的な文字列操作が可能になります。

目次