ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] StringBuffer클래스의 메서드
    JAVA 2022. 8. 8. 10:19
    728x90
    반응형

    StringBuffer의 특징

    StringBuffer는 동기화(데이터 보호)되어 있고 멀티스레드에 안전하다는 특징이 있다.

    • 스레드의 종류 및 특징
      • 싱글 스레드는 한 번에 1개의 작업을 하는 것을 말합니다.
      • 멀티 스레드는 한 번에 n개의 작업을 하는 것을 말합니다.
        • 멀티 스레드의 경우 스레드끼리 데이터를 공유하는데 이때 데이터가 꼬일 수 있으며 이를 방지하기 위해서는 동기화로 작업해주어야 합니다. (데이터 보호 목적)

    • StringBuffer() : 16 문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스를 생성한다.
    • StringBuffer(int length) : 지정된 개수의 문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스를 생성한다.
    • StringBuffer(String str) : 지정된 문자열 값(str)을 갖는 StringBuffer 인스턴스를 생성한다.
    class StringBuffer1{
        StringBuffer sb1 = new StringBuffer(); // 결과 : sb = ""
        StringBuffer sb2 = new StringBuffer(10); // 결과 : sb = ""(배열 길이 10)
        StringBuffer sb3 = new StringBuffer("Hi"); // 결과 : sb = "Hi"
    }
    • StringBuffer append(...) : 매개변수로 입력된 값을 문자열로 변환하여 StringBuffer 인스턴스가 저장하고 있는 문자열의 뒤에 덧붙인다.
      • ... 에 들어갈 수 있는 타입 : boolean, char, char [], double, float, int, long, Object, String
      • StringBuffer C = A.append(B) : A가 가리키는 객체에 B를 덧붙이고 그 주소를 참조 변수 C에 대입한다.
    class StringBuffer2{
        StringBuffer sb1 = new StringBuffer("abc");
        
        void appendTest(){
            StringBuffer sb2 = sb1.append(true);
            sb1.append('d').append(10.0f); // f는 배열에 들어가지 않는다.
            StringBuffer sb3 = sb1.append("ABC").append(123);
            System.out.println(sb1); // abctrued10.0ABC123
            System.out.println(sb2); // abctrued10.0ABC123
            System.out.println(sb3); // abctrued10.0ABC123
        }
    }
    • int capacity() : StringBuffer 인스턴스의 버퍼 크기( 총배열의 길이 )를 알려준다.
    • int length() : StringBuffer 인스턴스에 담긴 문자열의 길이를 알려준다.
    class StringBuffer3{
        StringBuffer sb = new StringBuffer(100);
        
        void appendTest(){
            sb.append("abcd");
        }
        int bufferSize = sb.capacity(); // bufferSize = 100
        int stringSize = sb.length(); // stringSize = 4
    }
    • char charAt(int index) : 지정된 위치(index)에 있는 문자를 반환한다.
    class StringBuffer4{
        StringBuffer sb = new StringBuffer("abc");
        char c = sb.charAt(2); // c = 'c'
    }
    • StringBuffer delete(int start, int end) : 시작 위치(start)부터 끝 위치(end) 사이에 있는 문자를 제거한다.
      • 단, 끝 위치(end)의 문자는 제외한다.
      • start <= x < end
    • StringBuffer deleteCharAt(int index) : 지정된 위치(index)의 문자를 제거한다.
    • StringBuffer insert(int pos,...) : 두 번째 매개변수로 받은 값을 문자열로 변환하여 지정된 위치(pos)에 추가한다.
      • ... 에 들어가는 타입 : boolean, char, char [], double, float, int, long, Object, String
    class StringBuffer5{
        StringBuffer sb1 = new StringBuffer("0123456");
        StringBuffer sb3 = new StringBuffer("0123456");
        StringBuffer sb4 = new StringBuffer("0123456");
        
        void get(){
            StringBuffer sb2 = sb1.delete(3,6); // 345
            System.out.println(sb1); // 0126
            System.out.println(sb2); // 0126
            
            sb3.deleteCharAt(3); // index 3 위치 제거
            System.out.println(sb3); // 012456
            
            sb4.insert(4,'.'); // index 4 위치에 .을 추가한다.
            System.out.println(sb4); // 0123.456
        }
    }
    • StringBuffer replace(int start, int end, String str) : 지정된 범위(start~end)의 문자들을 주어진 문자열로 바꾼다.
      • 단, end 위치에 있는 문자는 포함되지 않는다.
      • start <= x < end
    class StringBuffer6{
        StringBuffer sb = new StringBuffer("0123456");
        
        void replaceTest(){
            sb.replace(3,6,"AB"); // 인덱스 3 ~ 5까지 제거 후 "AB"로 대체
            System.out.println(sb); // 012AB6
        }
    }
    • StringBuffer reverse() : StringBuffer 인스턴스에 저장되어 있는 문자열의 순서를 거꾸로 나열한다.
    class StringBuffer7{
        StringBuffer sb = new StringBuffer("asdf0123");
        
        void reverseTest(){
            sb.reverse();
            System.out.println(sb); // 3210fdsa
        }
    }
    • void setCharAt(int index, char ch) : 지정된 위치의 문자를 주어진 문자(ch)로 바꾼다.
    class StringBuffer8{
        StringBuffer sb = new StringBuffer("0123456");
        
        void setCharAtTest(){
            sb.setCharAt(5, 'o');
            System.out.println(sb); // 01234o6
        }
    }
    • String toString() : StringBuffer인스턴스의 문자열을 String으로 반환한다.
    class StringBuffer9{
        StringBuffer sb = new StringBuffer("0123456");
        String str = sb.toString(); // 문자열 "0123456"
    }
    • void setLength(int newLength) : 지정된 길이로 문자열의 길이를 변경합니다.
      • 단, 길이가 늘리는 경우 나머지 빈 공간을 널문자 '\u0000'로 채운다.
    class StringBuffer9{
        StringBuffer sb1 = new StringBuffer("0123456");
        StringBuffer sb2 = new StringBuffer("0123456");
        String str = "";
        
        void setLengthTest(){
            sb1.setLength(5); // 012345
            sb2.setLength(10); // 0123456nullnullnull
            str = sb2.toString().trim(); // 0123456
            // trim()은 앞뒤로 빈공간을 없애는 String 메서드이다.
        }
    }
    • String substring(int start) : 지정된 위치(start)부터 문자열 끝까지 반환
    • String substring(int start, int end) : 지정된 위치(start)부터 끝 위치(end) 전까지 문자열로 반환한다.
      • start <= x < end
    class StringBuffer11{
        StringBuffer sb = new StringBuffer("0123456");
        String str1 = sb.substring(3); // 3456
        String str2 = sb.substring(3, 5); // 34
    }

    2. StringBuffer에 대해 자세히 알아보기

    • StringBuffer는 String처럼 문자열 배열(char [])을 내부적으로 가지고 있다.
    • String은 불변이지만 StringBuffer는 내용 변경이 가능하다.
    StringBuffer sb = new StringBuffer("abc");
    // char[] 타입으로 {'a','b','c'} 생성되고 이 주소를 참조변수 sb에 저장한다.
    sb.append("123");
    // char[] 타입으로 {'a','b','c','1','2','3'} 이렇게 내용이 변경되고 주소를 참조변수 sb에 저장한다.
    • StringBuffer는 equals()가 오버 라이딩되어 있지 않다. (주소 비교)
      • String은 equals()가 오버 라이딩되어 값을 비교한다.
    public class StringBufferTEST {
    	public static void main(String[] args) {
    		
    		StringBuffer sb1 = new StringBuffer("abc");
    		StringBuffer sb2 = new StringBuffer("abc");
    		System.out.println(sb1 == sb2); // 주소비교 false
    		System.out.println(sb1.equals(sb2)); // 주소비교 false
    		
    		//  StringBuffer -> String으로 변환 후 equals()로 값 비교
    		String s1 = sb1.toString();
    		String s2 = sb2.toString();
    		System.out.println(s1.equals(s2)); // 값비교 true
    		
    		StringBuffer t1 = new StringBuffer("a");
    		StringBuffer t2 = t1.append("B");
    		StringBuffer t3 = t2.append(10.0f);
    		
    		System.out.println(t1); // aB10.0
    		System.out.println(t2); // aB10.0
    		System.out.println(t3); // aB10.0
    	}
    }
    728x90
    반응형
Designed by Tistory.