StringBuilder란?
- java.lang 패키지에 포함된 문자열을 효율적으로 처리하는 클래스
- 문자열을 수정가능하게 만들어 기존 문자열(String)보다 빠르고 유연하게 처리가 가능함.
- 보통 문자열 덧붙이기, 삭제, 뒤집기, 삽입등에 사용
StringBuilder를 사용하는 이유
| 항목 | String (불변) | StringBuilder (가변) |
|---|
| 특성 | 문자열이 불변(immutable) | 문자열이 가변(mutable) |
| 변경 방식 | 변경 시 새로운 객체 생성 | 내부 버퍼를 직접 수정 |
| 성능 | 문자열 연산 많을수록 느림 | 빠름 |
| 사용 상황 | 간단한 문자열, 상수 처리 등 | 반복적인 수정/조작이 필요한 경우 |
주요 생성자
| 생성자 | 설명 |
|---|
| new StringBuilder() | 빈 버퍼 생성 |
| new StringBuilder(String str) | 초기 문자열 설정 |
StringBulder 주요 메서드
| 메서드 | 설명 | 예시 |
|---|
| append(String s) | 문자열 추가 | sb.append("abc"); |
| insert(int offset, String s) | 특정 위치에 삽입 | sb.insert(1, "X"); |
| delete(int start, int end) | 구간 삭제 | sb.delete(1, 3); |
| reverse() | 문자열 뒤집기 | sb.reverse(); |
| toString() | 문자열로 반환 | String str = sb.toString(); |
| setCharAt(int index, char ch) | 특정 인덱스 문자 수정 | sb.setCharAt(2, 'Z'); |
| length() | 현재 길이 반환 | sb.length(); |
| charAt(int index) | 문자 하나 조회 | sb.charAt(0); |
1. append - 문자열 추가
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("hello");
sb.append(" world");
}
}
2. insert - 특정 위치에 삽입
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("hello");
sb.append(" world");
sb.insert(0, "Say ");
}
}
3. setCharAt - 특정 인덱스 문자 수정
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("hello");
sb.append(" world");
sb.insert(0, "Say ");
sb.setCharAt(4, 'H');
}
}
4. delete - 구간 삭제
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("hello");
sb.append(" world");
sb.insert(0, "Say ");
sb.setCharAt(4, 'H');
sb.delete(0, 4);
}
}
5. reverse()
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("hello");
sb.append(" world");
sb.insert(0, "Say ");
sb.setCharAt(4, 'H');
sb.delete(0, 4);
sb.reverse();
}
}
StringBuilder 메서드를 이용하면 방금 풀었던 BOJ10988팰린드롬인지확인하기 문제도 쉽게 풀 수 있다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String reversed = new StringBuilder(str).reverse().toString();
if (str.equals(reversed)) {
System.out.println("1");
} else {
System.out.println("0");
}