JAVA

StringBuilder / StringBuffer 클래스 및 자주 쓰이는 매서드 정리

min민 2022. 12. 21.

 

StringBuilder

기존에 String 클래스의 인스턴스는 

여러 개의 문자열을 더할 때 매번 새로운 인스턴스를 생성해야하는 불편함이 있는데

StringBuilder가 이를 효율적으로 사용할 수 있게 해준다.

 

 

ex) 

public class Main {
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("문자열 ").append("연결");
        String str = stringBuilder.toString();
        System.out.println(stringBuilder);
        System.out.println(str);
    }
}

 

 

다음과 같은 예제가 있을때

stringBuilder의 객체가 생성된후. append()의 인자로 연결하고자하는 문자열을 넣어서 StringBuilder의 객체를 통해 호출된다. => 

 System.out.println(stringBuilder);

 

결과 값으로는 => 문자열 연결  // 이 출력되게 된다.

 

 

또한 문자열을 출력하거나 변수에 문자열을 할당할 때에는 toString()매서드를 통해

  String str = stringBuilder.toString();
  System.out.println(str);

결과값이 => 문자열 연결 //로 같이 출력되게 된다.

 

 

 

 

StringBuffer 

String 클래스의 인스턴스는 한번 생성되면 읽기만하고 변경할 수 없게된다.

이러한 문제를 해결하기위해 StringBuffer 클래스를 사용하게된다.

 

 

 

StringBuffer은 인스턴스 값을 변경할 수도 있고, 추가할 수도있다.

클래스 내부에는 버퍼(buffer)라고 하는 독립적 공간을 가지는데 16개 문자를 저장하는 크기이며

인스턴스 생성시 언제나 16개의 문자를 더 저장할 수 있도록 여유있는 크기로 저장된다.

 

 

 

StringBuffer 클래스에서 자주 사용되는 매서드

append() / capacity() / delete() / insert()

 

 

 

ex)

append()

=> concat() 메서드와 같은 결과를 반환, 내부적인 처리 속도가 훨씬 빠르다.

StringBuffer str = new StringBuffer("Java");
System.out.println("문자열 : " + str);
System.out.println(str.append(" programming"));
System.out.println("append() 메서드 호출 후 문자열 : " + str);

와 같은 예제에서 

 

첫 줄

str변수에 java가 할당되어 있으므로

첫번째 println은  => 문자열 : Java  //가 출력된다.

 

 

두번째 줄

str에 있는 Java와 append매서드의 결과인 "연결"을 통해서

두번째 println은 => Java programming이 출력된다 * "pro~"앞에 뛰어쓰기가 있기 때문에 뛰어서 작성된다.

 

세번째 줄

 

결과로 str에 최종저장되는 값은 Java programming이기에

세번째 println은 => append() 메서드 호출 후 문자열 : Java programming 가 된다.

 

 

 

 

 

 

 

capacity()

=> StringBuffer 인스턴스의 현재 버퍼 크기 여유 버퍼크기 16개에 + 문자길이를 더해 출력

StringBuffer str01 = new StringBuffer();
StringBuffer str02 = new StringBuffer("Java");
System.out.println(str01.capacity());
System.out.println(str02.capacity());

 

str01의 buffer크기는 ()비어있기때문에

버퍼의 특징으로 인스턴스 생성 시 사용자가 설정한 크기보다 언제나 16개의 문자를 더 저장할 수 있도록 여유 있는 크기로 생성되니 16이 출력된다.

 

마찬가지로

str02는 4+16 이되니 20이 출력된다.

 

 

 

 

 

 

delete() 매서드
=> 인덱스가 시작인 위치의 문자부터 마지막 숫자-1 인 위치의 문자까지를 삭제하고 있다.

즉 아래 예제에 대입하면 4부터 시작해서 7인 위치의 문자까지 삭제하게 된다.

StringBuffer str = new StringBuffer("Java Oracle");
System.out.println("문자열 : " + str);
System.out.println(str.delete(4, 8));
System.out.println(str.deleteCharAt(1));
System.out.println("deleteCharAt() 메소드 호출 후 문자열 : " + str);

 

위 부분에서 delete 매서드만 빼서 보자.

System.out.println(str.delete(4, 8));

 

Java Oracle 문자열은 총 11위치까지 존재하게되는데

delete매서드는 4~7까지의 글자를 삭제하게 된다.

따라서 결과값은 Javacle이 출력되게 된다.

 

 

 

 

System.out.println(str.deleteCharAt(1));

deleteCharAt() 매서드는 사용하게되면 특정 위치의 한개문자만 삭제하게 된다. 따라서

이전 결과값으로 인해 str에 저장된 Javacle에서 1번째 위치인 a를 제거해

Jvacle이 된다.

 

 

 

따라서 deleteCharAt() 메소드 호출 후 문자열 : Jvacle가 최종 출력되게 된다.

 

 

 

 

 


insert() 매서드

=> 인수로 전달된 값을 문자열로 변환한 후 문자열에 지정된 인덱스 위치에 추가하게된다.

이때 전달된 인덱스가 문자열의 길이와 같으면 append() 메서드와 같이 연결한 결과를 반영하게 된다.

StringBuffer str = new StringBuffer("Java Programming!!");
System.out.println("문자열 : " + str);
System.out.println(str.insert(4, "Script"));
System.out.println("insert() 메서드 호출 후 문자열 : " + str);

 

inster t매서드만 따로 빼서 보도록하자.

System.out.println(str.insert(4, "Script"));

위의 예제에서 4번재 위치한 값은 "Java(이 공간이다.) programming!!"

저 공간에 삽입하면 JavaScript programming!!이 되게되고

JavaScript Programming!! 가 출력된다.

 

 

 

 

 

 

 

자바의

StringBuilder / StringBuffer 클래스의 결과값과

자주 사용되는 매서드의 활용을 알아봤다.

자주 사용되는 클래스들이니 꼭 숙지하도록 하자.

 

 

 

 

 

더 많은 StringBuffer 매서드의 활용을 알고싶다면

 

↓ 아래 링크를 참고해도 좋을것 같다.

https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html

 

댓글