코린이의 소소한 공부노트

StringBuffer 클래스 본문

Java

StringBuffer 클래스

무지맘 2022. 8. 18. 11:24

[StringBuffer 클래스]

1. String 클래스처럼 문자열을 저장하고 다루기 위한 클래스이다.

2. String 클래스와 마찬가지로 내부적으로 char[]를 갖고 있다.

3. String은 내용을 변경할 수 없지만(immutable), StringBuffer는 내용을 변경할 수 있다(mutable).

4. 배열은 길이를 변경할 수 없다. 그러므로 StringBuffer를 생성할 때 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해줘야 한다. -> [생성자]에서 확인 가능

 

[생성자]

public StringBuffer(){
    this(16);
}

StringBuffer sb = new StringBuffer(); // sb = ""

StringBuffer()

  - 16 문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스 생성

 

 

public StringBuffer(int length){ // 적절한 길이를 선택해 지정해줄 수 있음
    value = new char[length];
    shared = false;
}

StringBuffer sb = new StringBuffer(10); // sb = ""

StringBuffer(int length)

  - 지정된 개수의 문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스 생성

 

 

public StringBuffer(String str){
    this(str.length() + 16);
    append(str);
}

StringBuffer sb = new StringBuffer("Hi"); // sb = "Hi"

StringBuffer(String str)

  - 지정된 문자열(str)을 갖는 StringBuffer 인스턴스 생성

  - 이때 버퍼의 길이는 str의 길이 + 16

 

[메서드]

StringBuffer sb1 = new StringBuffer("123"); // sb1 = "123"
StringBuffer sb2 = sb1.append(true); // sb1 = "123true", sb2 = "123true"
sb1.append('A').append(10.0f); // sb1 = "123trueA10.0", sb2 = "123trueA10.0"

StringBuffer append(types x)

  - types: boolean, char, char[], int, long, float, double, Object, String

  - x의 값을 문자열로 변환 후 StringBuffer 인스턴스가 저장하고 있는 문자열 뒤에 덧붙이고, 자기 자신을 반환함

    - sb1과 sb2는 같은 객체를 가리킴

    - StringBuffer를 반환하는 것이기 때문에, 3번째 코드처럼 쓸 수도 있음 -> 메서드 체이닝(chaining)

  - 참조변수의 경우 toString()을 호출한 결과를 문자열로 반환 후 덧붙임

 

 

StringBuffer sb = new StringBuffer(100);
sb.append("abcd");
int bSize = sb.capacity(); // bSize = 100
int sSize = sb.length(); // sSize = 4

int capacity()   //   int length()

  - capacity 메서드는 StringBuffer 인스턴스의 버퍼 크기를 알려줌

  - length 메서드는 버퍼에 담긴 문자열의 길이를 알려줌

 

 

StringBuffer sb = new StringBuffer("abc");
char c = sb.charAt(2); // c = 'c'

char charAt(int index)

  - 지정된 위치(index)에 있는 문자를 반환

 

 

StringBuffer sb = new StringBuffer("01234567");
sb.delete(3, 6); // sb = "01267"

StringBuffer delete(int start, int end)

  - 시작 위치(start) 이상 끝 위치(end) 미만의 문자 제거 후 자신을 반환

  - 제거된 후 남은 빈 공간은 뒤에 있는 문자열들이 자리를 옮겨 채워줌

 

 

StringBuffer sb = new StringBuffer("01234567");
sb.deleteCharAt(3); // sb = "0124567"

StringBuffer deleteCharAt(int index)

  - 지정된 위치(index)에 있는 문자를 제거 후 자신을 반환

  - 제거된 후 남은 빈 공간은 뒤에 있는 문자열들이 자리를 옮겨 채워줌

 

 

StringBuffer sb = new StringBuffer("01234567");
sb.insert(4,'.'); // sb = "0123.4567"

StringBuffer insert(int pos, types x)

  - types: boolean, char, char[], int, long, float, double, Object, String

  - x의 값을 문자열로 변환 후 지정된 위치(pos)에 추가한 후, 자기 자신을 반환

  - 참조변수의 경우 toString()을 호출한 결과를 문자열로 반환 후 추가

 

 

StringBuffer sb = new StringBuffer("01234567");
sb.replace(3,6,"A"); // sb = "012A67"

StringBuffer replace(int start, int end, String str)

  - 시작 위치(start) 이상 끝 위치(end) 미만의 문자를 주어진 문자열(str)로 바꾼 후, 자기 자신을 반환

 

 

StringBuffer sb = new StringBuffer("01234567");
sb.reverse(); // sb = "76543210"

StringBuffer reverse()

  - StringBuffer 인스턴스에 저장되어 있는 문자열의 순서를 뒤집어준 후, 자기 자신을 반환

  - 문자열의 길이가 n이라고 하면, 0번째와 n-1번째가 자리를 바꾸고, 1번째와 n-2번째가 자리는 바꾸는 형식으로 뒤집힘

 

 

StringBuffer sb = new StringBuffer("01234567");
sb.setCharAt(5, 'a'); // sb = "01234a67"

void setCharAt(int index, char ch)

  - 지정된 위치(index)의 문자를 주어진 문자(ch)로 바꿈

 

 

StringBuffer sb = new StringBuffer("01234567");
                  // sb = "01234567"
sb.setLength(5);  // sb = "01234"
sb.setLength(10); // sb = "01234     "

void setLength(int newLength)

  - 지정된 길이로 문자열의 길이를 변경

  - 이때 크기를 늘리게 되어 빈 공간이 생기는 경우 빈 문자 '\u0000'으로 채움

 

 

StringBuffer sb = new StringBuffer("01234567");
String s = sb.toString(); // s = "01234567"

String toString()

  - 버퍼의 문자열을 String으로 반환

 

 

StringBuffer sb = new StringBuffer("01234567");
String s1 = sb.substring(3); // s1 = "34567" 
String s2 = sb.substring(2,6); // s2 = "2345"

String substring(int begin)   //   String substring(int begin, int end)

  - 주어진 시작 위치(begin) 이상 끝 위치(end) 미만의 범위에 있는 문자열 String으로 뽑아서 반환

  - end를 지정하지 않으면 문자열 길이로 자동 인식


[쿠키글] equals 메서드를 이용할 때 String 클래스와의 차이점

StringBuffer는 equals 메서드가 오버라이딩 되어있지 않기 때문에 내용이 아닌 주소를 비교한다.

내용을 비교하고 싶으면 String으로 변환 후 비교해야 한다.

StringBuffer sb1 = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");

System.out.println(sb1==sb2); // false
System.out.println(sb1.equals(sb2)); // false

String s1 = sb1.toString();
String s2 = sb2.toString();

System.out.println(s1==s2); // false
System.out.println(s1.equals(s2)); // true

 

 

'Java' 카테고리의 다른 글

StringBuilder 클래스  (0) 2022.08.24
Math 클래스  (0) 2022.08.24
문자열의 결합과 변환  (0) 2022.08.18
String 클래스  (0) 2022.08.16
Object 클래스와 메서드  (0) 2022.06.16