String,StringBuilder, StringBuffer, StringTokenizer

jaeyong Lee·2023년 12월 5일

항상 문자열 조작할 때면 StringStringBuilder 생각을 하는 편입니다.

String과 StringBuilder는 둘다 문자열 조작이 가능하지만 후자가 좀더 효율적인 문자열 조작을 할 수 있습니다.

오늘 이 차이에 대해 기억이 안나서 책을 다시 살펴보니!

중요한 차이점이 있었다는걸 한번 더 되새기게 되었습니다.

String 클래스 : 문자열을 조작할 때 해당 리터럴을 바꾸는 것처럼 보이지만 사실 새로운 String객체를 다시 생성합니다. (변경불가)
StringBuilder 클래스 : 내부 버퍼(데이터를 저장하는 메모리)에 문자열을 저장해두고 그 안에서 추가,수정,삭제 작업을 하도록 설계되어 있습니다.

문자열 변경 관점)

즉! String은 문자열 변경시 이전 객체는 계속버려지고 새로운 문자열 객체를 생성을 함으로 때문에 효율성이 좋다고 볼 수 없습니다.
문자열을 자주 변경해주어야 한다면 StringBuilder를 사용하는게 효율적 입니다.

주의!) -> 문자열을 단순히 비교하거나 읽을 때는 String이 StringBuilder보다 더 효율적이다.

사용법

class Solution {
    public String solution(String my_string, int[] index_list) {
        StringBuilder result = new StringBuilder();

        for (int index : index_list) {
            // 주어진 인덱스에 해당하는 글자를 StringBuilder에 추가
            if (index >= 0 && index < my_string.length()) {
                result.append(my_string.charAt(index));
            }
        }

        return result.toString();
    }
}
  1. StringBuilder 객체를 생성해준다.
  2. append,insert,delete,replace,ToString()등 사용하고 싶은 메소드 사용

추가) StringBuffer

어디에 많이 쓰이나?

StringBuilder는 단일스레드 환경에서 사용됨으로 , 단일 스레드로 동작하는 로직에서 문자열을 효율적으로 처리할 때 사용된다.
성능측면에서는 string Builder가 더 빠르다.

StringBuffer는 멀티스레드 환경에서 문자열 조작이 필요한 경우 사용된다.
여러 스레드가 동시에 문자열을 처리할때 -> 서버 애플리케이션
buffer에 담아둔 다음 동기화해주면서 계속 변경

StringTokenizer

StringTokenizer: 문자열을 순차적으로 하나씩 토큰으로 가져오는 방식. 메모리 효율적이며, 토큰을 한 번에 다 쓸 필요가 없을 때 사용.

split(): 문자열을 한 번에 모두 분리해서 배열로 반환. 모든 토큰을 한꺼번에 사용하거나, 정규식을 통한 복잡한 구분이 필요할 때 사용.

즉 전자는 토큰이 다 필요없을때 순차적으로 필요한 만큼만 처리할 때 효과적이고
split는 전체가 필요할 때 효과적이다.

0개의 댓글