자바에서 문자열을 동적으로 처리하기 위해 StringBuilder 를 사용하기도 하지만 그와 비슷한 java StringBuffer 라는 것도 있다. 이 둘의 사용방식은 매우 비슷하며 사용하기도 하지만 그와 비슷한 StringBuffer 라는 것도 있다. 이 둘의 사용방식은 매우 비슷하며 사용하는 메서드 또한 같다.
java StringBuffer 자바에서 문자열을 동적으로 처리하기
java api 문서에서 먼저 확인을 해 보자.
그것에 대한 내용은 아래와 같다.
thread 세이프인 가변의 캐릭터 라인으로 캐릭터 라인 버퍼는 String 과 같다.
캐릭터 라인 버퍼에는 항상 캐릭터 라인이 포함되어 있지만, 캐릭터 라인의 길이와 내용은 특정의 메서드의 호출에 의해 변경할 수 있다.
캐릭터 라인 버퍼는 복수의 thread에 의해 안전하게 사용할 수 있다 .
각 캐릭터 라인 버퍼에는 용량이 있다.
캐릭터 라인 버퍼에 포함되는 캐릭터 라인의 길이가 용량을 초과하지 않는 한, 새로운 내부 버퍼 배열을 할당할 필요없이 자동적으로 용량이 증가합니다.
java StringBuffer는 StringBuilder과 매우 유사하지만, 스레드에 안전여부에 차이가 있다.
사용법
간단하게 java StringBuffer 를 사용하는 방법은 append 메서드를 사용하는 것이다.
StringBuffer vStringBuffer = new StringBuffer();
vStringBuffer.append("브레이브걸스");
vStringBuffer.append("민영");
vStringBuffer.append("유정");
vStringBuffer.append("은지");
vStringBuffer.append("유나");
java StringBuffer의 insert 메서드를 사용하여 원하는 위치에 문자열을 추가할 수 있다.
vStringBuffer.insert(6, "걸그룹");
추가된 문자열 혹은 특정 문자열의 시작위치를 알기 위해서는 lastIndexOf 메서드를 사용할 수 있다.
int vStrIndex = vStringBuffer.lastIndexOf("걸그룹");
위에서 입력한 문자열 단어인 걸그룹을 삭제하고 싶다면, delete 메서드를 사용한다.
vStringBuffer.delete(6, 9);
또는
vStringBuffer.delete(vStrIndex, vStrIndex + "걸그룹".length());
StringBuffer 은 중간에 문자열이 추가되면 메모리용량이 자동으로 증가하고 그 상태를 유지한다.
만약 문자열이 줄어들었을 경우 메모리공간의 낭비가 발생할 수 있다.
이 낭비를 제거하기 위해 trimToSize 메서드를 사용한다.
vStringBuffer.trimToSize();
trimToSize 메서드로 줄어든 StringBuilder 에서 다시 문자열을 추가하고 삭제를 하더라도 trimToSize 를 사용해도 상관이 없다. 특정문자열을 삭제하고 메모리공간을 최적화하는 오히려 도움을 줄 수 있을 거란 생각이다.
vStringBuffer.insert(6, "인기있는걸그룹");
vStringBuffer.trimToSize();
또는
vStringBuffer.delete(vStrIndex, vStrIndex + "인기있는걸그룹".length());
vStringBuffer.trimToSize();
전체코드와 실행결과
위의 과정을 자바 코드로 실행을 시켜본다.
StringBuilder 와 큰 차이가 없음을 알 수 있다.
이전에 작성했던 StringBuilder 와 비교해 보도록 하자.
>>> java StringBuilder 자바에서 문자열을 동적으로 처리하기
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 + " -----");
//--------------------------------------------------
StringBuffer vStringBuffer = new StringBuffer();
vStringBuffer.append("브레이브걸스");
vStringBuffer.append("민영");
vStringBuffer.append("유정");
vStringBuffer.append("은지");
vStringBuffer.append("유나");
System.out.println("\n");
System.out.println("결과표시" + "\t" + vStringBuffer);
System.out.println("크기" + "\t" + vStringBuffer.capacity());
System.out.println("길이" + "\t" + vStringBuffer.length());
vStringBuffer.insert(6, "걸그룹");
System.out.println("\n");
System.out.println("결과표시" + "\t" + vStringBuffer);
System.out.println("크기" + "\t" + vStringBuffer.capacity());
System.out.println("길이" + "\t" + vStringBuffer.length());
int vStrIndex = vStringBuffer.lastIndexOf("걸그룹");
System.out.println("\n");
System.out.println("문자열의 시작 인덱스" + "\t" + vStrIndex);
System.out.println("문자열의 길이" + "\t" + "걸그룹".length());
System.out.println("크기" + "\t" + vStringBuffer.capacity());
System.out.println("길이" + "\t" + vStringBuffer.length());
//vStringBuffer.delete(6, 9);
vStringBuffer.delete(vStrIndex, vStrIndex + "걸그룹".length());
System.out.println("\n");
System.out.println("결과표시" + "\t" + vStringBuffer);
System.out.println("크기" + "\t" + vStringBuffer.capacity());
System.out.println("길이" + "\t" + vStringBuffer.length());
//vStringBuffer.delete(6, 9);
vStringBuffer.trimToSize();
System.out.println("\n");
System.out.println("결과표시" + "\t" + vStringBuffer);
System.out.println("크기" + "\t" + vStringBuffer.capacity());
System.out.println("길이" + "\t" + vStringBuffer.length());
vStringBuffer.insert(6, "인기있는걸그룹");
vStringBuffer.trimToSize();
System.out.println("\n");
System.out.println("결과표시" + "\t" + vStringBuffer);
System.out.println("크기" + "\t" + vStringBuffer.capacity());
System.out.println("길이" + "\t" + vStringBuffer.length());
vStringBuffer.delete(vStrIndex, vStrIndex + "인기있는걸그룹".length());
vStringBuffer.trimToSize();
System.out.println("\n");
System.out.println("결과표시" + "\t" + vStringBuffer);
System.out.println("크기" + "\t" + vStringBuffer.capacity());
System.out.println("길이" + "\t" + vStringBuffer.length());
//--------------------------------------------------
System.out.println("\n");
System.out.println("종료 : " + vStrTestTitle + " -----");
}
}
댓글