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를 사용하면 성능 향상