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