본문 바로가기
programming/SpringJava

java StringBuilder 자바에서 문자열을 동적으로 처리하기

by 개코 - 개발과 코딩 2021. 3. 22.

자바에서 문자열을 다루는 것은 알게 모르게 많이 사용한다. 단순히 String 을 사용할 수 있지만 많은 문자열을 처리하기에는 불편할 수 있다. java StringBuilder 클래스는 이러한 것을 해소하고 보다 동적인 문자열 처리를 할 수 있도록 도와준다.

java StringBuilder 자바에서 문자열을 동적으로 처리하기

java api 에서 확인해 본 StringBuilder 의 의미는 아래와 같다.

문자의 가변 순서로 StringBuffer와 호환성이 있는 API를 제공합니다만, 동기화는 보증되지 않으며 StringBuffer 의 간단한 대체로서 사용되도록 설계되고 있습니다.
고속으로 실행되므로 하는 경우는 StringBuffer 보다 우선해 사용하는 것을 추천한다.

 

사용법

간단하게 StringBuilder 를 사용하는 방법은 append 메서드를 사용하는 방법이다.

StringBuilder vStringBuilder = new StringBuilder();
vStringBuilder.append("브레이브걸스");
vStringBuilder.append("민영");
vStringBuilder.append("유정");
vStringBuilder.append("은지");
vStringBuilder.append("유나");

StringBuilder의 insert 메서드를 사용하면 원하는 위치에 단어를 추가할 수 있다.

vStringBuilder.insert(6, "걸그룹");

특정 문자열의 시작위치를 알기 이해서는 lastIndexOf 메서드를 사용하여 위치를 찾을 수 있다.

int vStrIndex = vStringBuilder.lastIndexOf("걸그룹");

위에서 입력한 단어인 걸그룹 을 삭제하고 싶다면 , delete 메서드를 사용하면 된다.
삭제시 필요한 인자값은 시작과 끝 인덱스임을 기억하자.
만약, 정해진 위치가 아닌 가변적이고 동적인 위치를 알고 싶다면 위에서 언급한 lastIndexOf 메서드와 함께 활용하도록 한다.

vStringBuilder.delete(6, 9);
또는
vStringBuilder.delete(vStrIndex, vStrIndex + "걸그룹".length());

StringBuilder는 중간에 문자열이 추가되면 메모리용량이 증가하고 그 상태를 유지하도록 하고 있다.
그렇기에 문자열보다 메모리용량이 크면 강제로라도 줄일 필요가 있다.
이 경우는 trimToSize 메서드를 사용한다. 문자열 데이터를 입력하거나 삭제하고 사용해도 상관이 없다.

vStringBuilder.trimToSize();

만약, trimToSize 메서드를 사용하여 줄어든 StringBuilder 에 다시 문자열을 추가하고 삭제를 하고 trimToSize 메서드를 사용해도 상관없다. 특정문자열을 삭제하고 같이 사용하는 것이 메모리 유지에 도움이 되지 않을까 하는 생각이다.

vStringBuilder.delete(vStrIndex, vStrIndex + "인기있는걸그룹".length());
vStringBuilder.trimToSize();

 

전체코드와 실행결과

위의 과정을 자바 코드로 실행을 시켜보자.

public class StringBuilderTest {

	public static void main(String[] args) {
		
		// TODO Auto-generated method stub

		String vStrTestTitle = "자바 StringBuilderTest"; 
		
		System.out.println("\n");
		System.out.println("시작 : " + vStrTestTitle + " -----");
		
		//--------------------------------------------------
		
        	// 데이터 생성
		StringBuilder vStringBuilder = new StringBuilder();
		vStringBuilder.append("브레이브걸스");
		vStringBuilder.append("민영");
		vStringBuilder.append("유정");
		vStringBuilder.append("은지");
		vStringBuilder.append("유나");
		
		System.out.println("\n");
		System.out.println("결과표시" + "\t" + vStringBuilder);
		System.out.println("크기" + "\t" + vStringBuilder.capacity());
		System.out.println("길이" + "\t" + vStringBuilder.length());

		// 데이터 추가
		vStringBuilder.insert(6, "걸그룹");
		
		System.out.println("\n");
		System.out.println("결과표시" + "\t" + vStringBuilder);
		System.out.println("크기" + "\t" + vStringBuilder.capacity());
		System.out.println("길이" + "\t" + vStringBuilder.length());

		// 문자열 찾기
		int vStrIndex = vStringBuilder.lastIndexOf("걸그룹");
		
		System.out.println("\n");
		System.out.println("문자열의 시작 인덱스" + "\t" + vStrIndex);
		System.out.println("문자열의 길이" + "\t" + "걸그룹".length());
		System.out.println("크기" + "\t" + vStringBuilder.capacity());
		System.out.println("길이" + "\t" + vStringBuilder.length());

		// 문자열 삭제
		//vStringBuilder.delete(6, 9);
		vStringBuilder.delete(vStrIndex, vStrIndex + "걸그룹".length());
		
		System.out.println("\n");
		System.out.println("결과표시" + "\t" + vStringBuilder);
		System.out.println("크기" + "\t" + vStringBuilder.capacity());
		System.out.println("길이" + "\t" + vStringBuilder.length());
		
        	// StringBuilder 메모리용량 변경
		//vStringBuilder.delete(6, 9);
		vStringBuilder.trimToSize();
		
		System.out.println("\n");
		System.out.println("결과표시" + "\t" + vStringBuilder);
		System.out.println("크기" + "\t" + vStringBuilder.capacity());
		System.out.println("길이" + "\t" + vStringBuilder.length());
		
        	// 데이터추가 후 메모리용량 변경
		vStringBuilder.insert(6, "인기있는걸그룹");
		vStringBuilder.trimToSize();
		
		System.out.println("\n");
		System.out.println("결과표시" + "\t" + vStringBuilder);
		System.out.println("크기" + "\t" + vStringBuilder.capacity());
		System.out.println("길이" + "\t" + vStringBuilder.length());
		
        	// 데이터삭제 후 메모리용량 변경
		vStringBuilder.delete(vStrIndex, vStrIndex + "인기있는걸그룹".length());
		vStringBuilder.trimToSize();
		
		System.out.println("\n");
		System.out.println("결과표시" + "\t" + vStringBuilder);
		System.out.println("크기" + "\t" + vStringBuilder.capacity());
		System.out.println("길이" + "\t" + vStringBuilder.length());
		
		//--------------------------------------------------
		
		System.out.println("\n");
		System.out.println("종료 : " + vStrTestTitle + " -----");
	}

}
반응형

댓글