java.langパッケージのStringBufferクラス
StringBufferコンストラクタ
| コンストラクタ | 説明 |
|---|---|
| StringBuffer() | デフォルトコンストラクタ。初期状態で16個の文字を保存できるオブジェクトを生成する。 |
| StringBuffer(int capacity) | 容量(capacity)で指定された文字数を保存できるオブジェクトを生成する。 |
| StringBuffer(String str) | strで指定された文字列に加えて、追加で16個の文字を保存できるオブジェクトを生成する。 |
StringBufferの主なメソッド
| メソッド | 説明 |
|---|---|
| StringBuffer append(boolean b) | bを現在の文字列の末尾に追加する。 |
| StringBuffer append(char c) | cを現在の文字列の末尾に追加する。 |
| StringBuffer append(double d) | dを現在の文字列の末尾に追加する。 |
| StringBuffer append(float f) | fを現在の文字列の末尾に追加する。 |
| StringBuffer append(int i) | iを現在の文字列の末尾に追加する。 |
| StringBuffer append(long l) | lを現在の文字列の末尾に追加する。 |
| StringBuffer append(Object obj) | objを現在の文字列の末尾に追加する。 |
| StringBuffer append(String str) | strを現在の文字列の末尾に追加する。 |
| int capacity() | 現在の文字列バッファの容量を返す。 |
| char charAt(int index) | indexに該当する文字を返す。 |
| StringBuffer delete(int start, int end) | startからendまでの範囲を削除する。 |
| StringBuffer deleteCharAt(int index) | indexの文字を削除する。 |
| StringBuffer insert(int offset, boolean b) | offset番目前にbを挿入する。 |
| StringBuffer insert(int offset, char c) | offset番目前にcを挿入する。 |
| StringBuffer insert(int offset, int i) | offset番目前にiを挿入する。 |
| StringBuffer insert(int offset, long l) | offset番目前にlを挿入する。 |
| StringBuffer insert(int offset, Object obj) | offset番目前にobjを挿入する。 |
| StringBuffer insert(int offset, String str) | offset番目前にstrを挿入する。 |
| int length() | 文字バッファにある文字数を返す。 |
| StringBuffer replace(int start, int end, String str) | startからendまでの範囲を文字列strで置換する。 |
| StringBuffer reverse() | 文字列を逆順にして返す。 |
| void setCharAt(int index, char ch) | indexの文字をchの値に設定する。 |
| void setLength(int newLength) | バッファのサイズをnewLengthに設定する。 |
| String toString() | 現在の文字列をStringオブジェクトとして返す。 |
文字列バッファのサイズ
- int capacity()
- int length()
- void setLength(int newLength)
capacityメソッドは、StringBufferオブジェクトに割り当てられた総容量を取得するときに使用する。
lengthメソッドは、StringBufferオブジェクトの現在の長さを知るときに使用する。
例
package com.devkuma.tutorial.stringbuffer;
public class StringBufferCapacity {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("abcdef");
System.out.println("capacity : " + sb.capacity());
System.out.println("length : " + sb.length());
sb.setLength(2);
System.out.println("setLength : " + sb);
}
}
実行結果:
capacity : 22
length : 6
setLength : ab
上の結果では、lengthメソッドは"abcdef"の長さである6を表示しているが、capacityメソッドは"abcdef"の長さ6に加えて16文字分の保存領域を自動で追加するため、容量22が表示されている。そしてsetLengthメソッドはバッファサイズを2に変更したため、“ab"が表示された。
文字列バッファの文字
StringBufferオブジェクトの文字(char)は、参照および置換が可能である。
- char charAt(int index)
- void setCharAt(int index, char ch)
package com.devkuma.tutorial.stringbuffer;
public class StringBufferChar {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("abcde");
System.out.println("charAt(3) : " + sb.charAt(3));
sb.setCharAt(4, 'f');
System.out.println("setCharAt(4, 'f') : " + sb);
}
}
実行結果:
charAt(3) : d
setCharAt(4, 'f') : abcdf
最初にcharAtを使って3番インデックスの値’d’を表示し、次にsetCharAtを使って4番インデックスの値を’f’に変更したため、最終的にabcdfが表示された。
文字列バッファへのデータ追加
StringBufferオブジェクトの末尾に、他のデータ型のデータを文字列に変換して追加するには、appendメソッドを使用する。
- StringBuffer append(boolean b)
- StringBuffer append(char c)
- StringBuffer append(double d)
- StringBuffer append(float f)
- StringBuffer append(int i)
- StringBuffer append(long l)
- StringBuffer append(Object obj)
- StringBuffer append(String str)
appendを使用した例は以下のとおりである。
package com.devkuma.tutorial.stringbuffer;
public class StringBufferAppend {
public static void main(String[] args) {
boolean b = true;
char c = 'a';
double d = 1.1;
float f = 3.14f;
int i = 1;
long l = 2;
String str = "A";
StringBuffer sb = new StringBuffer();
sb.append(b).append(", ");
sb.append(c).append(", ");
sb.append(d).append(", ");
sb.append(f).append(", ");
sb.append(i).append(", ");
sb.append(l).append(", ");
sb.append(str);
System.out.println(sb);
}
}
実行結果:
true, a, 1.1, 3.14, 1, 2, A
appendメソッドはStringクラスのconcatと似た用途のメソッドだが、Stringクラスとは異なり、新しいオブジェクトに新しい文字列が割り当てられるのではなく、呼び出した文字列に変更が保存される。与えられた文字列に他の文字列を追加する作業が多い場合は、StringBufferオブジェクトを使うことが性能向上に大きく役立つ。
次の例では、StringオブジェクトとStringBufferオブジェクトを生成した後、それぞれ文字列を10000回ずつ追加する。このとき各オブジェクトの速度を測定してみよう。測定には現在時刻を取得できるSystem.currentTimeMillis()メソッドを使用する。
package com.devkuma.tutorial.stringbuffer;
public class StringBufferAppend2 {
public static void main(String[] args) {
String str = "A";
long currentStr = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
str += "A";
}
System.out.println("String :" + (System.currentTimeMillis() - currentStr) + "ms");
StringBuffer sb = new StringBuffer("A");
long currentSb = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
sb.append("A");
}
System.out.println("StringBuffer :" + (System.currentTimeMillis() - currentSb) + "ms");
}
}
実行結果:
String :68ms
StringBuffer :1ms
上の結果を見ると、StringオブジェクトよりStringBufferオブジェクトのほうが非常に速いことを確認できる。
文字列バッファへのデータ挿入
StringBufferオブジェクトの指定した位置に、他のデータ型のデータを文字列として挿入するには、insertメソッドを使用する。
- StringBuffer insert(int offset, boolean b)
- StringBuffer insert(int offset, char c)
- StringBuffer insert(int offset, int i)
- StringBuffer insert(int offset, long l)
- StringBuffer insert(int offset, Object obj)
- StringBuffer insert(int offset, String str)
package com.devkuma.tutorial.stringbuffer;
public class StringBufferInsert {
public static void main(String[] args) {
boolean b = true;
char c = 'a';
double d = 1.1;
float f = 3.14f;
int i = 1;
long l = 2;
String str = "A";
StringBuffer sb = new StringBuffer("b=, c=, d=, f=, i=, l=, str=");
sb.insert(2, b);
sb.insert(10, c);
sb.insert(15, d);
sb.insert(22, f);
sb.insert(30, i);
sb.insert(35, l);
sb.insert(42, str);
System.out.println(sb);
}
}
実行結果:
b=true, c=a, d=1.1, f=3.14, i=1, l=2, str=A
文字列バッファの文字列を逆順にする
StringBufferオブジェクトの文字列を逆順にして返す。
- StringBuffer reverse()
package com.devkuma.tutorial.stringbuffer;
public class StringBufferReverse {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("abcdef");
System.out.println(sb.reverse());
}
}
実行結果:
fedcba
文字列バッファの文字列削除
StringBufferオブジェクトのdeleteメソッドは、指定された範囲を削除する。
StringBufferオブジェクトのdeleteCharAtメソッドは、入力したインデックスの文字を削除する。
- StringBuffer delete(int start, int end)
- StringBuffer deleteCharAt(int index)
package com.devkuma.tutorial.stringbuffer;
public class StringBufferDelete {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("abcxxxdef");
sb.delete(4, 6);
System.out.println(sb);
sb.deleteCharAt(3);
System.out.println(sb);
}
}
実行結果は以下のとおりである。
abcxdef
abcdef
文字列バッファの文字列置換
StringBufferオブジェクトの文字列で、指定された範囲を入力された文字列に置換する。
- StringBuffer replace(int start, int end, String str)
package com.devkuma.tutorial.stringbuffer;
public class StringReplace {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("abcxxghi");
sb.replace(3, 5, "def");
System.out.println(sb);
}
}
実行結果は以下のとおりである。
abcdefghi