Programming/자바(Java)

9-15 StringBuffer클래스 / StringBuilder

먹보 개발자 2024. 10. 10. 15:28

- String처럼 문자형 배열(char[ ])을 내부적으로 가지고 있다.

문자를 가지고 조작(변경, 추가...)을 많이 해야할 때는 내용 변경이 가능한 StringBuffer를 사용하는게 좋다

 

StringBuffer의 생성자

-배열은 길이 변경불가. 공간이 부족하면 새로운 배열 생성해야

1. 새로운 배열 생성

2. 내용복사

3. 참조변경

 

- StringBuffer는 String과 달리 내용 변경이 가능하다.

- append()는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환

- StringBuffer는 equals()가 오버라이딩 되어있지 않다

-> StringBuffer을 String으로 변환 후에 equals()로 비교해야 한다.

String s = sb.toString();

String s2 = sb2.toString();

 

StringBuffer의 생성자와 메서드

 

메서드 / 설명 예제 / 결과
StringBuffer() StringBuffer sb = new StringBuffer();
16문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스를 생성한다. sb = " "
StringBuffer(int length) StringBuffer sb = new StringBuffer(10);
지정된 개수의 문자를 담을 수 있는 버퍼를 가진 StringBuffer인스턴스를 생성한다. sb = " "
StringBuffer(String str) StringBuffer sb = new StringBuffer("Hi");
지정된 문자열 값(str)을 갖는 StringBuffer인스턴스를 생성한다. sb = "Hi"
StringBuffer append(boolean b)
StringBuffer append(char c)
StringBuffer append(char[ ] str)
StringBuffer append(int i)
StringBuffer append(long l)
StringBuffer append(float f)
StringBuffer append(double d)
StringBuffer append(Object o)
StringBuffer append(String str)
StringBuffer sb = new StringBuffer("abc");
StringBuffer sb2 = sb.append(true);
sb.append('d').append(10.0f);

StringBuffer sb3 = sb.append("ABC").append(123);
매개변수로 입력된 값을 문자열로 변환하여 StringBuffer인스턴스가 저장하고 있는 문자열의 뒤에 덧붙인다 sb = "abctrued10.0ABC123"
sb2 = "abctrued10.0ABC123"
sb3 = "abctrued10.0ABC123"
int capacity() StringBuffer sb = new StringBuffer(100);
sb.append("abcd");
int bufferSize = sb.capacity();
int stringSize = sb.length();
StringBuffer인스턴스의 버퍼크기를 알려준다. length()는 버퍼에 담긴 문자열의 길이를 알려준다. bufferSize = 100
stringSize = 4(sb에 담긴 문자열이 "abcd"이므로)
char charAt(int index) StringBuffer sb = new StringBuffer("abc");
char c = sb.charAt(2)
지정된 위치(index)에 있는 문자를 반환한다. c = 'c'
StringBuffer delete(int start, int end) StringBuffer sb = new StringBuffer("0123456");
StringBuffer sb2 = sb.delete(3, 6)
시작위치(start)부터 끝 위치(end) 사이에 있는 문자를 제거한다. 단, 끝 위치의 문자는 제외. sb = "0126"
sb2 = "0126"
StringBuffer deleteCharAt(int dex) StringBuffer sb = new StringBuffer("0123456");
sb.deleteCharAt(3)
지정된 위치(index)의 문자를 제거한다. sb = "012456"
StringBuffer insert(boolean b)
StringBuffer insert(char c)
StringBuffer insert(char[ ] str)
StringBuffer insert(int i)
StringBuffer insert(long l)
StringBuffer insert(float f)
StringBuffer insert(double d)
StringBuffer insert(Object o)
StringBuffer insert(String str)
StringBuffer sb = new StringBuffer("0123456");
sb.insert(4, '.');
두번째 매개변수로 받은 문자값을 문자열로 변환시켜 지정된 위치(pos)에 추가한다. pos는 0부터 시작 sb = "0123.456"
int length() StringBuffer sb = new StringBuffer("0123456");
int length = sb.length();
StringBuffer 인스턴스에 저장되어있는 문자열의 길이를 반환한다. length = 7
StringBuffer replace(int start, int end, String str) StringBuffer sb = new StringBuffer("0123456");
sb.replace(3, 6, "AB");
지정된 범위(start~end)의 문자들을 주어진 문자열로 바꾼다. end위치의 문자는 범위에 포함되지 않음.(start <= x < end) sb = "12AB6" "345"가 "AB"로 바뀌었다.
StringBuffer reverse() StringBuffer sb = new StringBuffer("0123456");
sb.reverse();
StringBuffer인스턴스에 저장되어있는 문자열의 순서를 거꾸로 나열한다. sb = "6543210"
void setCharAt(int index, char ch) StringBuffer sb = new StringBuffer("0123456");
sb.setCharAt(5, 'o');
지정된 위치(index)의 문자를 주어진 문자(ch)로 바꾼다 sb = "01234o6"
void setLength(int newLength) StringBuffer sb = new StringBuffer("0123456");
sb.setLength(5);

StringBuffer sb2 = new StringBuffer("0123456");
sb2.setLength(10);
String str = sb2.toString().trim();
지정된 길이로 문자열의 길이를 반환한다. 길이를 늘리는 경우에 나머지 빈공간을 널문자 '\u0000'로 채운다. sb = "01234"
sb2 = "0123456"
str = "0123456"
String toString() StringBuffer sb = new StrinBuffer("0123456");
String str = sb.toString();
StringBuffer인스턴스의 문자열을 String으로 반환 str = "0123456"
String substring(int start)
String substring(int start, int end)
StringBuffer sb = new StringBuffer("0123456");
String str = sb.substring(3);
String str2 = sb.substring(3, 5);
지정된 범위내의 문자열을 String으로 뽑아서 반환한다. 시작위치(start)만 지정하면 시작위치부터 문자열 끝까지 뽑아서 반환한다.  str = "3456"
str2 = "34"

 

StringBuilder

- StringBuffer는 동기화되어 있다. 멀티 쓰레드에 안전(thread-safe)

- 멀티쓰레드 프로그램이 아닌 경우, 동기화는 불필요한 성능저하

이럴 땐 StringBuffer대신 StringBuilder를 사용하면 성능 향상