오늘 알고리즘을 공부하는 중에 StringBuilder를 사용하는것이 나와서 StringBuilder에 대해서 탐구해 보았습니다.
StringBuilder를 사용하는 이유
자바에서는 문자열을 사용할 때 대개 String객체를 이용하게 된다.
이 String 객체를 덧셈 연산을 하게 되면 새로운 String 객체가 생성이 된다.
String a = "abc"
String b = "def"
String c = a + b //abcdef
String 객체는 한 번 생성되면 내용을 바꿀 수 없기때문에, 하나의 문자열을 다른 문자열과 연결하게 되는 순간 새로운 문자열 객체가 생성되게 되고, 이전 문자열은 가비지컬렉터로 들어가게 된다.
이런 String객체를 더하게 되면 객체가 생성되면서 메모리를 사용하게 되고, 이러한 연산이 많아질수록 성능저하가 일어나게 된다.
이런 경우에 StringBuilder를 사용하게 되는데,
StringBuilder는 변경 가능한 문자열을 만들어주기 때문에 문자열 연산을 진행해도 새로운 객체가 생성되지 않으므로 객체성성으로 인한 성능저하를 막을 수 있다.
StringBuilder 사용법과 자주 사용하는 메서드
생성자
- StringBuilder sb =
new StringBuilder()
: 객체 선언 - StringBuilder sb =
new StringBuilder(String str)
: str이 들어간 StringBuilder클래스를 바로 생성
메소드
append()
: 문자열 추가insert(int offset, String str)
: offset의 위치에 str을 추가replace(int x, int y, String str)
: 첫번째와 두번째 파라미터로 받는 숫자 인덱스에 위치한 문자열을 str로 대체한다.substring(int start, (int end))
: 인덱싱. 파라미터가 하나라면 해당 인덱스부터 끝까지, 두개라면 시작점과 끝점-1 까지 인덱싱 (sb.substring(5), sb.substring(3, 7))deleteCharAt(int index)
: 인덱스에 위치한 문자 하나를 삭제한다. (sb.deleteCharAt(3))delete(int start, int end)
: start 부터 end-1 까지의 문자를 삭제한다. (sb.delete(3, sb.length()))toString()
: String으로 변환한다. (sb.toString())reverse()
: 해당 문자 전체를 뒤집는다. (sb.reverse())setCharAt(int index, String s)
****: index 위치의 문자를 s로 변경setLength(int len)
: 문자열 길이 조정, 현재 문자열보다 길게 조정하면 공백으로 채워짐, 현재 문자열보다 짧게 조정하면 나머지 문자는 삭제trimToSize()
: 문자열이 저장된 char[] 배열 사이즈를 현재 문자열 길이와 동일하게 조정, String 클래스의 trim()이 앞 뒤 공백을 제거하는 것과 같이 공백 사이즈를 제공하는 것, 배열의 남는 사이즈는 공백이므로, 문자열 뒷부분의 공백을 모두 제거해준다고 보면 됨
사용 예시
public ArrayList<String> solution(int n, String[] str) {
ArrayList<String> answer = new ArrayList<>();
for (String x : str) {
String tmp = new StringBuilder(x).reverse().toString();
//문자열 x를 거꾸로 뒤집고 String객체로 반환
answer.add(tmp);
}
return answer;
}
참고
https://onlyfor-me-blog.tistory.com/317
https://da2uns2.tistory.com/entry/Java-StringBuilder-사용법과-주요-메소드
반응형