Study/Java

Java: StringBuilder의 사용

devyoseph 2021. 10. 8. 22:31
String의 단점
서로 다른 문자열 변수 두 개가 있고 그 둘을 더한다고 하자
String str1 = "Hello";
String str2 = "World";
str1 + str2는 "HelloWorld"가 되고 이 둘과는 연관없는 새로운 String 변수에 값이 저장된다.
즉, String 연산은 메모리의 낭비가 일어나기 쉽다(불변immutable 객체의 한계성)

 

StringBuilder: String의 단점 보완
StringBuilder를 사용하면 추가적인 인스턴스를 생성없이 문자열의 연산을 수행한다.
기존의 데이터를 참조하는 방식인데 이로 인해 문자의 삽입과 삭제가 자유롭다.
하지만 StringBuilder가 곧 String은 아니다. 연산 이후 String으로 변환해주어야 한다(toString()메소드)
StringBuilder sb = new StringBuilder();
StringBuilder의 인스턴스는 위와 같이 만들 수 있다

 

StringBuilder 사용하기
그러면 어떻게 사용할까? StringBuilder 내부의 메소드를 알아보자
StringBuilder의 메소드
.length(); 문자열의 길이를 반환 sb.length();
.reverse(); 문자열을 뒤집어준다 sb.reverse();
.append(""); 문자 뒤에 문자열을 추가해준다 sb.append("!!!");
.delete(index1, index2) index1부터 index2까지 문자열을 삭제한다 sb.delete(2, 5);
.insert( index, " "); index에 문자열 값을 삽입한다 sb.insert(2, "inserted");
.replace(index1, index2, " "); index1에서 index2를 문자열 값으로 대체 sb.replace(2, 4, "replaced");
.toString(); StringBuilder을 문자열로 변환 sb.toString();

 

예제: 응용 부분이 중요하다
	StringBuilder sb = new StringBuilder();
           sb.append("Hello"); //println 시: Hello
           sb.append("World"); //println 시: HelloWorld
           sb.delete(2, 5);    //println 시: HeWorld
          //응용: 메소드를 여러개 붙일 수 있다
           sb.append("/n").append("new line");

전체 결과

stringBuilder 초기화
sb.delete(0, sb.length);
sb.setLength(0);