StringBuffer, StringBuilder

MONA·2025년 7월 25일

나혼공

목록 보기
81/92

StringBuffer

Java에서 가변(mutable) 문자열을 다루기 위해서 사용되는 클래스

String 클래스는 불변(immutable)이기 때문에 문자열을 수정할 때마다 새로운 객체가 생성되는데, 이런 비효율을 줄이기 위해 StringBuffer나 StringBuilder를 사용한다.

  • 패키지: java.lang
  • 가변성: 문자열 직접 수정 가능(메모리 효율 ↑)
  • 스레드 안전 : 동기화 지원
  • 속도: StringBuilder보다 느리지만 멀티스레드 환경에서는 안전함
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
    }
}

StringBuilder

Java에서 가변(mutable) 문자열을 처리할 수 있게 도와주는 클래스

StringBuffer와 거의 동일한 기능을 제공하나, 동기화를 지원하지 않아 성능이 더 빠름.
단일 스레드 환경에서 문자열을 자주 조작할 때 적합.

  • 패키지 : java.lang
  • 가변성 : 문자열 수정 가능
  • 스레드 안전 : 비동기적. X
  • 속도 : StringBuffer보다 빠름
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 vs StringBuffervs StringBuilder

항목StringStringBufferStringBuilder
가변성불변가변가변
동기화XOX
성능느림중간빠름
스레드 안전성N/AOX
사용 상황문자열이 잘 바뀌지 않을 때멀티스레드 환경에서 문자열 조작 시단일 스레드 환경에서 문자열 조작 시

백준 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");
        }
    }
}
profile
고민고민고민

0개의 댓글