Java 입문 | java.lang 패키지 | StringBuffer 클래스

StringBuffer 생성자

생성자 설명
StringBuffer() 디폴트 생성자. 초기 16개의 문자를 저장할 수 있는 객체를 생성한다.
StringBuffer(int capacity) 용량 크기(capacity)로 지정된 문자라를 저장할 수 있는 객체를 생성한다.
StringBuffer(String str) str로 지정된 문자열과 추가로 16개의 문자를 더 저장할 수 있는 객체를 생성한다.

StringBuffer 주요 메소드

메소드 설명
StringBuffer append(boolean b) b를 현재의 문자열에 끝에 첨부한다.
StringBuffer append(char c) c를 현재의 문자열에 끝에 첨부한다.
StringBuffer append(double d) d를 현재의 문자열에 끝에 첨부한다.
StringBuffer append(float f) f를 현재의 문자열에 끝에 첨부한다.
StringBuffer append(int i) i를 현재의 문자열에 끝에 첨부한다.
StringBuffer append(long l) l를 현재의 문자열에 끝에 첨부한다.
StringBuffer append(Object obj) obj를 현재의 문자열에 끝에 첨부한다.
StringBuffer append(String str) str를 현재의 문자열에 끝에 첨부한다.
int capacity() 현재의 문자열 버퍼의 용량 크기를 반환한다.
char charAt(in index) index에 해당하는 문자를 반환한다.
StringBuffer delete(int start, int end) start부터 end까지의 범위 만큼 삭제한다.
StringBuffer deleteCharAt(int index) index의 문자를 삭제한다.
StringBuffer insert(int offset, boolean b) offset번째에 전에 b를 삽입한다.
StringBuffer insert(int offset, char c) offset번째에 전에 c를 삽입한다.
StringBuffer insert(int offset, int i) offset번째에 전에 i를 삽입한다.
StringBuffer insert(int offset, long l) offset번째에 전에 l를 삽입한다.
StringBuffer insert(int offset, Object obj) offset번째에 전에 obj를 삽입한다.
StringBuffer insert(int offset, String str) offset번째에 전에 str를 삽입한다.
int length() 문자 버퍼에 있는 문자의 개수를 반환한다.
StringBuffer replace(int start, int end, String str) start부터 end까지의 범위 만큼 문자열 str로 치환한다.
StringBuffer reverse() 문자열을 역순으로 반환한다.
void setCharAt(int index, char ch) index의 ch 문자의 값으로 설정한다.
void setLength(int newLength) 버퍼의 크기를 newLength 크기로 설정한다.
String toString() 현재의 문자열을 String 객체로 반환한다.

문자열 버퍼의 크기

  • int capacity()
  • int length()
  • void setLength(int newLength)

capacity 메소드는 StringBuffer 객체에 할당된 총 용량 크기를 구하고자 할 때 사용한다.
length 메소드는 StringBuffer 객체의 현재 길이를 알고자 할 때 사용한다.

예제

package com.devkuma.tutorial.stringbuffer;

public class StringBufferCapacity {

    public static void main(String[] args) {

        StringBuffer sb = new StringBuffer("abcdef");

        System.out.println("capacity : " + sb.capacity());
        System.out.println("length : " + sb.length());

        sb.setLength(2);
        System.out.println("setLength : " + sb);
    }
}

실행한 결과는 아래와 같다.

capacity : 22
length : 6
setLength : ab

위 결과에서 length 메소드는 “abcdef"의 길이 만큼 6이 표시가 되었지만, capacity 메소드는 “abcdef"의 길이 6에 추가로 16개의 문자를 더 저장할 수 있는 공간을 자동으로 추가하기에 용량 크기 22가 표시되었다. 그리고 setLength 메소드는 버퍼 크기를 2로 새로 변경하여 “ab"가 표시가 되었다.

문자열 버퍼의 문자

StringBuffer 객체의 문자(char)를 조회 및 교체가 가능하다.

  • char charAt(in index)
  • void setCharAt(int index, char ch)

예제

package com.devkuma.tutorial.stringbuffer;

public class StringBufferChar {

    public static void main(String[] args) {

        StringBuffer sb = new StringBuffer("abcde");
        System.out.println("charAt(3) : " + sb.charAt(3));

        sb.setCharAt(4, 'f');
        System.out.println("setChatAt(4, 'f') : " + sb);
    }
}

실행 겨로가는 아래와 같다.

charAt(3) : d
setChatAt(4, 'f') : abcdf

첫번째 charAt를 이용해서 3번 인덱스 값 ’d’를 표시하고, 두번째 setChatAt를 이용해서 4번 인덱스 값을 ‘f’로 변경하여 최종 abcdf가 표시 되었다.

문자열 버퍼에 데이터 첨부

StringBuffer 객체의 끝에 다른 데이터 타입의 데이터를 문자열로 변환하여 첨부하기 위해서는 append 메소드를 이용한다.

  • StringBuffer append(boolean b)
  • StringBuffer append(char c)
  • StringBuffer append(double d)
  • StringBuffer append(float f)
  • StringBuffer append(int i)
  • StringBuffer append(long l)
  • StringBuffer append(Object obj)
  • StringBuffer append(String str)

예제

package com.devkuma.tutorial.stringbuffer;

public class StringBufferAppend {

    public static void main(String[] args) {

        boolean b = true;
        char c = 'a';
        double d = 1.1;
        float f = 3.14f;
        int i = 1;
        long l = 2;
        String str = "A";

        StringBuffer sb = new StringBuffer();
        sb.append(b).append(", ");
        sb.append(c).append(", ");
        sb.append(d).append(", ");
        sb.append(f).append(", ");
        sb.append(i).append(", ");
        sb.append(l).append(", ");
        sb.append(str);

        System.out.println(sb);
    }
}

실행 결과는 아래와 같다.

true, a, 1.1, 3.14, 1, 2, A

append 메소드는 String 클래스의 객체의 concat과 비슷한 용도의 메소드이지만, String 클래스에서와는 달리 새로운 객체의 새 문자열이 할당되는 것이 아니라, 호출 문자열에 변경되어 저장된다. 주어진 문자열에 다른 문자열을 첨부하는 작업이 많은 경우니는 StringBuffer 객체를 사용하는 것이 성능 향상에 큰 도움이 된다.

다음 예제는 String 객체와 StringBuffer 객체를 생성한 후에 각각 문자열을 3000번씩 첨부를 할 것이다. 이때 각 객체의 속도를 측정해 보자. 측정을 할 시에는 현재 시간을 알 수 있는 메소드System.currentTimeMillis()를 이용할 것이다.

예제

package com.devkuma.tutorial.stringbuffer;

public class StringBufferAppend2 {

    public static void main(String[] args) {

        String str = "A";
        long currentStr = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            str += "A";
        }
        System.out.println("String :" + (System.currentTimeMillis() - currentStr) + "ms");

        StringBuffer sb = new StringBuffer("A");
        long currentSb = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            sb.append("A");
        }
        System.out.println("StringBuffer :" + (System.currentTimeMillis() - currentSb) + "ms");

    }
}

실행 결과는 아래와 같다.

String :68ms
StringBuffer :1ms

위 결과를 보면 String객체보다 StringBuffer객체가 월등히 속도가 빠른 것을 확인 할 수가 있다.

문자열 버퍼에 데이터 삽입

StringBuffer 객체의 끝에 다른 데이터 타입의 데이터를 문자열로 삽입하기 위해서는 insert 메소드를 이용한다.

  • StringBuffer insert(int offset, boolean b)
  • StringBuffer insert(int offset, char c)
  • StringBuffer insert(int offset, int i)
  • StringBuffer insert(int offset, long l)
  • StringBuffer insert(int offset, Object obj)
  • StringBuffer insert(int offset, String str)
package com.devkuma.tutorial.stringbuffer;

public class StringBufferInsert {

    public static void main(String[] args) {

        boolean b = true;
        char c = 'a';
        double d = 1.1;
        float f = 3.14f;
        int i = 1;
        long l = 2;
        String str = "A";

        StringBuffer sb = new StringBuffer("b=, c=, d=, f=, i=, l=, str=");
        sb.insert(2, b);
        sb.insert(10, c);
        sb.insert(15, d);
        sb.insert(22, f);
        sb.insert(30, i);
        sb.insert(35, l);
        sb.insert(42, str);

        System.out.println(sb);
    }
}

실행 결과는 아래와 같다.

b=true, c=a, d=1.1, f=3.14, i=1, l=2, str=A

문자열 버퍼에 문자열 역순

StringBuffer 객체의 문자열을 역순으로 반환한다.

  • StringBuffer reverse()

예제

package com.devkuma.tutorial.stringbuffer;

public class StringBufferReverse {

    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("abcdef");
        System.out.println(sb.reverse());
    }
}

실행 결과는 아래와 같다.

fedcba

문자열 버퍼에 문자열 삭제

StringBuffer 객체의 delete 메소드는 주어진 범위 만큼 삭제한다.
StringBuffer 객체의 deleteCharAt 메소드는 입력한 인덱스의 문자를 삭제한다.

  • StringBuffer delete(int start, int end)
  • StringBuffer deleteCharAt(int index)
package com.devkuma.tutorial.stringbuffer;

public class StringBufferDelete {

    public static void main(String[] args) {

        StringBuffer sb = new StringBuffer("abcxxxdef");
        sb.delete(4, 6);
        System.out.println(sb);
        sb.deleteCharAt(3);
        System.out.println(sb);
    }
}

실행 결과는 아래와 같다.

abcxdef
abcdef

문자열 버퍼에 문자열 치환

StringBuffer 객체의 문자열에서 주어진 범위 만큼 입력 받은 문자열 치환한다.

  • StringBuffer replace(int start, int end, String str)
package com.devkuma.tutorial.stringbuffer;

public class StringReplace {

    public static void main(String[] args) {

        StringBuffer sb = new StringBuffer("abcxxghi");
        sb.replace(3, 5, "def");
        System.out.println(sb);
    }
}

실행 결과는 아래와 같다.

abcdefghi