저번에 한번 포스팅 한 Java Lang Package 의 한 종류인 StringBuilder의 사용법과 메서드를 다시 정리 해보려고 한다.
[String]
StringBuilder를 알기 전에 String에 대하여 알아야 한다. 흔히 문자열을 생각하면 자연스럽게 떠오르는게 String 이다.
String str1 = "Hello ";
String str2 = "world";
str1 += str2;
System.out.println(str1); //"Hello world"
이렇게 String 두개의 객체를 연산하게 되면 새로운 String을 생성하게 된다. String은 불변객체이기 때문에 한번 생성 되면 변경할 수 없다. 위와 같이 + 연산자를 사용하여 문자열을 연결하면 연결할 때마다 새로운 문자열 객체가 생성된다. 따라서, String 객체와 String 객체를 더하는 행위는 메모리 할당과 메모리 해제를 발생시키며 더하는 연산이 많아진다면 성능적으로 좋지 않다.
[StringBuilder]
그래서 등장한게 StringBuilder 이다. StringBuilder클래스는 문자열을 변경하거나 이어붙이는 경우 추가 메모리 생성 없이 기존 문자열이 확장되는 클래스이다. 문자열이 빈번하게 변경될 때 사용하면 성능이 좋다. StringBuilder클래스는 멀티쓰레드 환경에서 문자열의 안전한 변경을 보장해주지 않는 특징(not thread-safe)이 있다. 즉, 여러 쓰레드가 문자열(공유 자원)에 동시에 접근 및 변경이 이루어지면 수행결과가 올바르지 않는 것을 의미한다.
[생성자]
기본생성자
StringBuilder sb = new StringBuilder();
int capacity 생성자
이 생성자는 내부 버퍼의 초기 용량을 설정한다. ( ) 안의 숫자가 버퍼의 최대 길이를 나타내며, 문자열이 이 용량을 초과하면 자동으로 확장 된다.
StringBuilder sb = new StringBuilder(10);
String str 생성자
이 생성자는 ( ) 안에 주어진 문자열을 사용하여 StringBuilder 객체를 초기화 한다. 즉 아래의 예시처럼 "aaa" 라는 문자열을 포함하는 StringBuilder 객체를 만든다. 이 경우 초기 버퍼 용량은 문자열의 길이에 따라 동적으로 조정될 것입니다.
StringBuilder sb = new StringBuilder("aaa");
[주요 메서드]
문자열 추가 메소드 - append()
4는 숫자지만 append로 인해 문자열로 변환 되어 abc와 연결 된다.
sb.append(4);StringBuilder sb = new StringBuilder();
sb.append("abc");
sb.append(4);
현재 sb = abc4
원하는 위치에 문자열 넣기 - insert ()
offset 위치에 있던 문자를 없애고 str 을 넣는다.
sb.insert(int offset, String str);
sb.insert(2, "zzz")
현재 sb = abzzz4
문자열 대체 - replace ()
첫번째와 두번째 파라미터로 받은 숫자 인덱스에 위치한 문자열을 대체한다.
sb.replace(int index1, int index2, String str);
sb.replace(3, 6, "hi")
현재 sb = abzhi
문자열 추출 - substring ()
String substring(int startIndex)
String substring(int startIndex, int endIndex)
파라미터로 1개를 받으면 해당 위치부터 끝까지 출력하라는 의미이다.
파라미터로 2개를 받으면 startIndex 부터 공백포함 endIndex 전까지 추출하라는 의미이다.
String original = "Hello, World!";
String sub1 = original.substring(7); // "World!"
String sub2 = original.substring(0, 9); // "Hello, Wo"
문자열 삭제 - deleteCharAt ()
sb.deleteCharAt(int index);
sb.delete(int start, int end);
파라미터로 1개를 받으면 해당 위치의 문자를 지우라는 의미이고
파라미터로 2개를 받으면 start의 위치부터 end전까지를 삭제하라는 의미이다.
String original = "Hello, World";
original.deleteCharAt(int 3); // Helo, World
original.deleteCharAt(int 3, int 9); // Helld
String으로 변환 - toString()
sb.toString();
문자 전체를 뒤집기 - reverse()
sb.reverse();
index 위치의 문자 변경 - setCharAt()
sb.setCharAt(int index, String str);
문자열 길이 조정 - setLength()
현재 문자열보다 길게 조정하면 공백으로 채워지고, 현재 문자열보다 짧게 조정하면 나머지 문자는 삭제한다.
sb.setLength(int len);
내부버퍼 크기 조절 - trimToSize()
trimToSize() 메서드는 내부 버퍼의 크기를 현재 문자열의 길이와 일치하도록 조절하는 메서드이다. StringBuilder 객체의 내부 버퍼가 현재 저장된 문자열의 길이에 맞게 잘라내어 불필요한 공간을 제거한다.
sb.trimToSize();
'JAVA' 카테고리의 다른 글
자바의 <T> 제네릭 타입 (Generic Type) (0) | 2024.05.24 |
---|---|
MVC 모델 (0) | 2023.10.27 |
자바 자료형 정리(Java Data Type) (0) | 2023.09.06 |
Query String (쿼리스트링)의 개념 (0) | 2023.09.04 |
Java Robot 클래스 delay 적용하기 (1) | 2023.09.02 |