Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

봄디의 개발일지

[JAVA] StringBuilder 사용법과 메소드 총정리 본문

자바

[JAVA] StringBuilder 사용법과 메소드 총정리

bomdy 2024. 9. 8. 21:15

 

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!

 

 

반환값이 자기 자신이기 때문에 .을 활용해서 메소드들을 계속 나열하여 편리하게 사용할 수 있습니다.