StringBuilderクラス

可変長文字列の扱い

通常、Javaで文字列をあつかう場合には、Stringクラスを用います。ところが、Stringクラスに含まれる文字列は変更できないのです。そのため、文字列を何度も変更するようなプログラムを組むと、次々と新たなオブジェクトが生成されてしまい、処理パフォーマンスの悪いプログラムとなってしまいます。

そこで用いられるのが、StringBufferクラス、およびStringBuilderクラスです。この2つのちがいは、StringBufferクラスがスレッドセーフであり、StringBuilderクラスに比べて処理が低速である点です。定義されているメソッドなど、他の点にちがいはありませんから、ここではStringBufferクラスを中心に取り上げることにします。

ClassSample01.java
package class6;

public class SampleClass01 {

	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer("Apple ");  		//オブジェクトを生成
		sb.append("Banana ");		//	文字列を末尾に追加
		sb.append("Piniapple");		//	文字列を末尾に追加
		System.out.println(sb);		//	内容を表示
	}

}
実行結果
Apple Banana Piniapple

append()メソッドによって末尾に文字列が追加されています。この処理では、Stringオブジェクトのように新たにオブジェクトが生成されることはなく、StringBufferに含まれる文字列自体が変更されています。

insertメソッド

StringBuilderクラスには、append()メソッドで文字列を追加することができますが、insert()メソッドを使えば、文字列を挿入することも可能です。

ClassSample02.java
package class6;

public class SampleClass02 {

	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer("Apple ");  		//オブジェクトを生成
		sb.append("Piniapple");		//	文字列を末尾に追加
		sb.insert(6,"Banana ");		//	文字列を末尾に追加
		System.out.println(sb);		//	内容を表示
	}

}
実行結果
Apple Banana Piniapple

実行結果は、ClassSample01.javaと同じです。appendメソッドは最後に文字列を追加したのに対し、insertメソッドは指定した位置に文字列を挿入します。挿入する位置を表すオフセットは先頭が0です。

なお、オフセットの表す数値は、あくまでも文字数であり、半角文字も全角文字も1文字は1文字として同じ扱いをしています。

文字列の削除

続いて、文字列の削除を見てみましょう。StringBuilderクラスでは、deleteメソッドを用いて途中の文字列を削除することも可能です。以下のサンプルを見てください。

ClassSample03.java
package class6;

public class SampleClass03 {

	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer("Apple Pineapple ");  		//オブジェクトを生成
		sb.append("Banana");
		System.out.println(sb);		//	内容を表示(削除前)
		sb.delete(6, 16);
		System.out.println(sb);		//	内容を表示(削除後)
	}

}
実行結果
Apple Pineapple Banana
Apple Banana

「Apple Pineapple Banana」という文字列から、deleteメソッドにオフセットの6番目から16番目が削除されています。