Java에서 가변(mutable) 문자열을 다루기 위해서 사용되는 클래스
String 클래스는 불변(immutable)이기 때문에 문자열을 수정할 때마다 새로운 객체가 생성되는데, 이런 비효율을 줄이기 위해 StringBuffer나 StringBuilder를 사용한다.
java.langStringBuilder보다 느리지만 멀티스레드 환경에서는 안전함StringBuffer sb1 = new StringBuffer(); // 빈 버퍼 생성
StringBuffer sb2 = new StringBuffer("Hello"); // 초기 문자열 지정
StringBuffer sb3 = new StringBuffer(100); // 버퍼 용량 지정
| 메서드 | 설명 |
|---|---|
append(String s) | 문자열 추가 |
insert(int offset, String s) | 특정 위치에 문자열 삽입 |
replace(int start, int end, String s) | 문자열 일부를 다른 문자열로 교체 |
delete(int start, int end) | 특정 범위의 문자 삭제 |
reverse() | 문자열 뒤집기 |
toString() | String 객체로 변환 |
public class Main {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
sb.insert(5, ",");
sb.replace(0, 5, "Hi");
sb.delete(3, 4);
sb.reverse();
System.out.println(sb.toString()); // 출력: dlroW,iH
}
}
Java에서 가변(mutable) 문자열을 처리할 수 있게 도와주는 클래스
StringBuffer와 거의 동일한 기능을 제공하나, 동기화를 지원하지 않아 성능이 더 빠름.
단일 스레드 환경에서 문자열을 자주 조작할 때 적합.
java.langStringBuffer보다 빠름StringBuilder sb1 = new StringBuilder(); // 빈 버퍼 생성
StringBuilder sb2 = new StringBuilder("Hello"); // 초기값 설정
StringBuilder sb3 = new StringBuilder(100); // 초기 버퍼 용량 설정
| 메서드 | 설명 |
|---|---|
append(String s) | 문자열 끝에 추가 |
insert(int offset, String s) | 지정 위치에 문자열 삽입 |
replace(int start, int end, String s) | 문자열 일부 교체 |
delete(int start, int end) | 문자열 일부 삭제 |
reverse() | 문자열 뒤집기 |
toString() | 최종 문자열을 String으로 반환 |
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
sb.insert(5, ",");
sb.replace(0, 5, "Hi");
sb.delete(3, 4);
sb.reverse();
System.out.println(sb.toString()); // 출력: dlroW,iH
}
}
| 항목 | String | StringBuffer | StringBuilder |
|---|---|---|---|
| 가변성 | 불변 | 가변 | 가변 |
| 동기화 | X | O | X |
| 성능 | 느림 | 중간 | 빠름 |
| 스레드 안전성 | N/A | O | X |
| 사용 상황 | 문자열이 잘 바뀌지 않을 때 | 멀티스레드 환경에서 문자열 조작 시 | 단일 스레드 환경에서 문자열 조작 시 |
백준 1259 펠린드롬수
https://www.acmicpc.net/problem/1259
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true){
String input = br.readLine();
if(input.equals("0")) break;
String reverse = new StringBuffer(input).reverse().toString();
if(input.equals(reverse)) System.out.println("yes");
else System.out.println("no");
}
}
}