StringBuilder 특징
- 변수 선언 시 객체를 생성하며, 문자열을 자주 수정할 때 사용
- String과 다르게 가변적인 속성을 가져 문자열 수정이 빠르고 효율적임
- 단, 멀티스레드 환경에서는 안전하지 않음
- 크기를 지정하지 않고 객체 생성 시 초기 용량은 16으로 설정됨
String str = "";
StringBuilder sb = new StringBuilder();
str = str + "a";
str = str + "b";
str = str + "c"; // String은 불변 : 문자열 수정할 때마다 새로운 문자열 객체 생성 >> 메모리 부담
sb.append("a");
sb.append("b");
sb.append("c"); // StringBuilder은 가변 : 문자열 수정 시 기존 객체를 수정 >> 메모리 사용 효율적
StringBuilder 주요 메서드
- append(문자열) : 문자열 추가
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("world");
String result = sb.toString(); // result = "Hello world" - insert(인덱스, 문자열) :지정한 위치에 문자열 삽입
StringBuilder sb = new StringBuilder("Hello");
sb.insert(5, " world"); // " world"를 인덱스 5에 삽입
String result = sb.toString(); // result = "Hello world" - deleteCharAt(인덱스): 지정된 인덱스의 문자 삭제
StringBuilder sb = new StringBuilder("Hello world");
sb.deleteCharAt(5); // ' ' 문자 삭제
String result = sb.toString(); // result = "Helloworld" - replace(시작인덱스, 끝인덱스, 문자열): 시작위치부터 끝 이전까지의 문자열을 대체
StringBuilder sb = new StringBuilder("Hello world");
sb.replace(6, 11, "Java"); // 인덱스 6부터 11 이전까지의 문자열을 "Java"로 대체
String result = sb.toString(); // result = "Hello Java" - reverse(): 문자열을 역순으로 뒤집음
StringBuilder sb = new StringBuilder("Hello");
sb.reverse(); // 문자열을 역순으로 변경
String result = sb.toString(); // result = "olleH" - length(): 현재 StringBuilder의 길이를 반환
StringBuilder sb = new StringBuilder("Hello world");
sb.replace(6, 11, "Java"); // 인덱스 6부터 11 이전까지의 문자열을 "Java"로 대체
String result = sb.toString(); // result = "Hello Java" - indexOf(문자열): 지정된 문자열이 처음으로 등장하는 인덱스 반환
StringBuilder sb = new StringBuilder("Hello world");
int index = sb.indexOf("world"); // index = 6