본문 바로가기

프로그래밍/Java

Java_java.lang패키지와 유용한 클래스(3)_StringBuffer클래스

③ StringBuffer클래스

: String클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만 StringBuffer클래스는 변경이 가능하다.

 

 

- StringBuffer의 생성자

public StringBuffer(int length) {	//적절한 크기로 지정해야 한다. 
    value= new char[length];
    shared=false;
}

public StringBuffer() {
    this(16);	//버퍼의 크기를 지정하지 않으면 버퍼의 크기는 16이 된다.
}

public StringBuffer(String str) {
    this(str.length()+16);	//지정한 문자열의 길이보다 16이 더 크게 버퍼를 생성한다.
    append(str);
}

→ 그렇기 때문에 문자열의 길이를 고려하여 버퍼의 길이를 충분히 잡아주는 것이 좋다.

 

 

- StringBuffer의 변경

: String과 달리 StringBuffer는 내용을 변경할 수 있다. 

StringBuffer sb=new StringBuffer("abc");	//StringBuffer를 선언하고
sb.append("123");	//append는 끝에 문자열을 추가하는 메서드

StringBuffer sb2= sb.append("Hello");	//sb의 내용뒤에 "Hello"를 추가한다.
System.out.println(sb);	//abc123Hello
System.out.println(sb2);//abc123Hello

→ sb의 내용 뒤에 123을 추가하여 abc123으로 출력된다.

→ sb와 sb2가 모두 같은 StringBuffer인스턴스를 가리키고 있으므로 같은 주소를 반환하여 sb2에도

같은 내용이 저장되어 출력된다.

 

 

-StringBuffer의 비교

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

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

StringBuffer는 equals()가 오버라이딩되어 있지 않다.

→ 반면에 toString()은 오버라이딩되어 있어서 StringBuffer인스턴스에 toString()을 호출하면 담고있는 문자열을 반환한다.

 

만일 StringBuffer클래스의 문자열을 비교하고 싶다면

class JavaJungsuk_StringBuffer_Ex9_11 {
    public static void main(String[] args) {
    	StringBuffer sb =new StringBuffer("abc");
        StringBuffer sb2=new StringBuffer("abc");
        
        System.out.println("sb==sb2?"+(sb==sb2));
        System.out.println("sb.equals(sb2)?"+sb.equals(sb2));
        
        String s =sb.toString();
        String s2=sb.toString();
        
        System.out.println("s.equals(s2)?"+equals(s2));
    }
}
결과
sb==sb2?false
sb.equals(sb2)?false
s.equals(s2)?true

→ StringBuffer를 String으로 변환 후 equals()로 비교해야 한다. 

 

 

- StringBuffer의 생성자와 메서드

class JavaJungsuk_StringBuffer_Ex9_12 {
    public static void main(String[] args) {
    	StringBuffer sb =new StringBuffer("01");
        StringBuffer sb2=new StringBuffer(23);
        sb.append('4').append(56);
        
        StringBuffer sb3=sb.append(78);
        sb3.append(9.0);
        
        System.out.println("sb="+sb);
        System.out.println("sb2="+sb2);
        System.out.println("sb3="+sb3);
        
        System.out.println("sb="+sb.deleteCharAt(10));	//인덱스 10자리의 문자 제거.
        System.out.println("sb="+sb.delete(3, 6));	//인덱스 3~5자리의 문자 제거.
        System.out.println("sb="+sb.insert(3, "abc"));	//인덱스 3의 자리에 abc 문자 추가.
        //인덱스 6부터 sb.length()까지의 문자를 "END"로 바꿈
        System.out.println("sb="+sb.replace(6, sb.length(), "END"));
        
        System.out.println("capacity="+sb.capacity());	//문자열이 담길 Buffer크기 반환.
        System.out.println("length="+sb.length());	//문자열 길이 반환.
    }
}
결과
sb=0123456789.0
sb2=0123456789.0
sb3=0.123456789.0
sb=01234567890
sb=01267890
sb=012abc67890
sb=012abcEND
capacity=18
length=9

 

0 1 '2' '3' '4' '5' '6' '7' '8' 9 . 0