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(in 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(in 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("setChatAt(4, 'f') : " + sb);
}
}
실행 결과:
charAt(3) : d
setChatAt(4, 'f') : abcdf
첫번째 charAt를 이용해서 3번 인덱스 값 ’d’를 표시하고, 두번째 setChatAt를 이용해서 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 객체를 생성한 후에 각각 문자열을 3000번씩 첨부를 할 것이다. 이때 각 객체의 속도를 측정해 보자. 측정을 할 시에는 현재 시간을 알 수 있는 메소드 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