今回は、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
は文字列内の削除を行います。
誤答理由
誤答が生じやすいのは、insert
とdelete
の範囲や動作に対する理解不足です。まず、insert(0, "Java")
は文字列の最初に”Java”を挿入します。そして、delete(4, 8)
はインデックス4から7までを削除します。
この範囲指定は閉区間ではなく、開始インデックスを含み、終了インデックスを含まない点が重要です。多くの誤解はこの区間指定から生じます。
つまずきポイント
つまずくポイントは、メソッドの使い方とその結果による変形の理解不足です。特にdelete
メソッドを使う際、その範囲の理解が大切です。
たとえば、贈り物を包む紙を想像してください。insert
は包装紙に何かを書き込む行為に似ています。そしてdelete
は、それをハサミで切り取る行為と考えると分かりやすいです。
発展知識
StringBuilder
の利点は、その効率性にあります。例えば、文字列結合を繰り返す操作では、String
よりもStringBuilder
を使う方がはるかにパフォーマンスが良いです。
また、StringBuilder
にはreverse
という文字列を反転するメソッドや、capacity
でバッファの容量を確認することもできます。これらの機能を駆使することで、より効果的な文字列操作が可能になります。