봄디의 개발일지
[JAVA] StringBuilder 사용법과 메소드 총정리 본문
2024.09.06 - [자바] - [JAVA] String이란? (String이 불변 객체인 이유 / String 메소드 정리)
지난 포스팅에서 String 객체에 대해 알아보았습니다.
String은 불변객체이기에 내부의 값을 변경할 수 없고, 속도도 느리다는 단점이 있었습니다.
이러한 문제를 해결하기 위한 불변이 아닌 가변 String 이 존재하는데 그것이 바로 StringBuilder 입니다.
1️⃣ StringBuilder 사용법
StringBuilder sb = new StringBuilder();
sb.append("hello");
StringBuilder sb1 = new StringBuilder("hello");
첫 번째 방법처럼 StringBuilder 객체를 생성한 후 append 메소드를 통해 문자열을 추가할 수 있고,
두 번째 방법처럼 처음부터 문자열을 넣어주는 방법이 있습니다.
StringBuilder 는 가변 객체이기 때문에 사이드 이펙트에 주의해서 사용해야 합니다.
2️⃣ StringBuilder 메소드
- append() : 문자열을 추가한다.
- insert(): 특정 위치에 문자열을 삽입한다.
- delete(int start, int end): 특정 범위의 문자열을 삭제한다.
- deleteCharAt(int index): 특정 인덱스의 한 문자만 삭제한다.
- replace(int start, int end, String str): 문자열을 교체한다.
- reverse(): 문자열을 뒤집는다.
- toString(): StringBuilder의 결과를 기반으로 String을 생성하여 반환한다.
- setLength(int newLength): 문자열의 길이를 조정한다.
- setCharAt(int index, char ch): 특정 위치의 문자를 변경한다.
- trimToSize(): StringBuilder 객체 내부 배열의 크기를 줄인다.
[append()] : StringBuilder 에 문자열을 추가한다.
StringBuilder sb = new StringBuilder("spring ");
sb.append("summer ");
sb.append("fall ");
sb.append("winter ");
System.out.println("sb = " + sb); //spring summer fall winter
[insert()] : 특정 위치에 문자열을 삽입한다.
StringBuilder sb = new StringBuilder("hello ");
sb.insert(6, "java");
System.out.println("sb = " + sb); //hello java
6번째 인덱스인 "hello " 다음에 "java" 문자열을 삽입합니다.
[delete(int start, int end)]: 특정 범위의 문자열을 삭제한다.
[deleteCharAt(int index)]: 특정 인덱스의 한 문자만 삭제한다.
StringBuilder sb = new StringBuilder("hello ");
sb.insert(6, "java");
sb.delete(6, 10);
System.out.println("sb = " + sb); //hello
sb.deleteCharAt(1);
System.out.println("sb = " + sb); //hllo
"java" 문자열 삽입 후, 6번째 인덱스인 j부터 9번째 인덱스인 a까지 삭제합니다.
주의) delete(6,10)은 10번째 인덱스까지 삭제하는 것이 아닌 한 개 앞인 9번째 인덱스까지 삭제합니다.
deleteCharAt(1)은 1번째 인덱스인 e를 삭제하여 "hllo" 가 출력 결과가 됩니다.
[replace( int start, int end, String str )]: 인덱스 범위만큼 문자열을 교체한다.
[reverse()] : 문자열을 뒤집는다.
StringBuilder sb = new StringBuilder("hello java welcome!");
sb.replace(6, 10, "spring");
System.out.println("sb = " + sb); //hello spring welcome!
sb.reverse(); //!emoclew gnirps olleh
6~9번째 인덱스까지의 문자열을 "spring" 문자열로 교체합니다. (delete와 마찬가지로 (10-1)까지의 문자열을 교체합니다.)
reverse() 는 단순히 문자열을 거꾸로 뒤집습니다.
[toString()]: StringBuilder의 결과를 기반으로 String을 생성하여 반환한다.
StringBuilder sb = new StringBuilder("hello java welcome!");
String str = sb.toString();
System.out.println("str = " + str); //hello java welcome!
toString() 메소드는 가변 객체인 StringBuilder로 생성한 문자열을 불변 객체인 String으로 바꾸어 반환합니다.
[setLength(int newLength)]: 문자열의 길이를 조정한다.
[setCharAt(int index, char ch)]: 특정 위치의 문자를 변경한다.
[trimToSize()]: StringBuilder 객체 내부 배열의 크기를 줄인다.
StringBuilder sb = new StringBuilder("hello java welcome!");
sb.setLength(10); //hello java
sb.setCharAt(5, '!'); //5번째 인덱스인 공백을 '!' 문자로 변경한다.
System.out.println("sb = " + sb); //hello!java
System.out.println("sb = " + sb.capacity()); //sb = 35
sb.trimToSize(); //hello!java 길이만큼 사이즈를 조정한다. (10)
System.out.println("sb = " + sb.capacity()); //sb = 10
setLength(10) 을 통해 문자열의 길이를 10으로 조정한다. 따라서 welcome! 은 출력되지 않습니다.
setCharAt(5, '!') 를 통해 5번째 인덱스의 공백을 '!' 문자로 조정한다. 따라서 문자열이 "hello!java! 로 변경됩니다.
StringBuilder는 가변이기 때문에 크기를 조정할 때 성능을 위해 배열을 크게 잡아둡니다. 따라서 sb.capacity() 를 할 경우 35가 출력이 되는데요, 실제 문자열의 길이는 10이기 때문에 trimToSize() 메소드를 통해 문자열의 길이만큼 사이즈를 조정합니다.
3️⃣ StringBuilder 메소드의 특징 (메소드 체이닝 [Method Chaining])
StringBuilder 메소드의 원형을 보면 아래와 같은 코드임을 알 수 있습니다.
@Override
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
여기서 볼 수 있는 특징으로는 메소드의 반환형이 StringBuilder 라는 것입니다.
이를 활용하여 위에서 설명한 메소드들을 좀 더 편리하게 사용할 수 있습니다.
StringBuilder sb = new StringBuilder("hello java ");
sb.append("welcome!").delete(0,6).replace(0,4, "spring");
System.out.println("sb = " + sb); //spring welcome!
반환값이 자기 자신이기 때문에 .을 활용해서 메소드들을 계속 나열하여 편리하게 사용할 수 있습니다.
'자바' 카테고리의 다른 글
[JAVA] 컬렉션 - List 정리 (ArrayList, LinkedList) (3) | 2024.10.06 |
---|---|
[JAVA] 자바 메모리 구조 (2) | 2024.09.15 |
[Intellij] 인텔리제이 자주 사용하는 단축키 모음 (윈도우) (3) | 2024.09.08 |
[JAVA] String이란? (String이 불변 객체인 이유 / String 메소드 정리) (2) | 2024.09.06 |
[JAVA] Enum이란? (Enum 사용법, 메소드 정리) (0) | 2024.07.13 |