Day 43

ChangWoo·2023년 5월 18일
0

자바의 정석

목록 보기
43/71

ch 9-15~18 StringBuffer클래스

StringBuffer클래스

String처럼 문자형 배열(char[])을 내부적으로 가지고 있다.

  • 문자열을 저장하고 다루기 위한 클래스
public final class StringBuffer implements java.io.Serializable {
	private char[] value;
    ...
}
  • 그러나, String과 달리 내용을 변경할 수 있다.(mutable)
  • StringBuffer를 만든 후, 문자열 abc를 저장하는 배열을 만들면, char배열이 만들어지고 거기에 abc가 저장된다.
  • append를 사용해서 새로운 문자열을 추가할 수 있다.(= 내용 변경이 가능하다.)

StringBuffer의 생성자

배열은 길이 변경불가. 공간이 부족하면 새로운 배열 생성해야

  • 길이가 5인 배열을 저장 후 새로운 값을 넣고 싶을 때는 공간부족
  • 그래서 1.새로운 배열을 생성해서 2.기존의 내용을 복사해서 3.참조변경을 해준다.
    StringBuffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해야

StringBuffer의 변경

StringBuffer는 String과 달리 내용 변경이 가능하다.

StringBuffer sb = new StringBuffer("abc");
sb.append("123"); // sb의 내용 뒤에 "123"을 추가한다.


append()는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환

  • append() : 끝에 문자열 추가 / delete() : 삭제 / insert() : 삽입
  • "ZZ"를 sb에 추가하고 그 추가된 sb의 주소가 sb2에 저장된다.
  • 왼쪽 코드보다 오른쪽의 코드가 더 간결해진다.

StringBuffer의 비교

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

  • this = obj가 되며, 그로 인해 내용이 같아도 주소가 다르므로 false가 출력된다.
    StringBuffer을 String으로 변환 후에 equals()로 비교해야 한다.
  • StringBuffer에 toString을 붙여 String으로 변환하고 equals를 통해 비교하면 true 값을 얻을 수 있다.

ch9-19~20 StringBuffer 클래스의 메서드

StringBuffer의 생성자와 메서드(1/4)

  • 생성자에 아무것도 없다면, 길이가 16인 배열이 생성된다.
  • length를 넣으면 길이가 10인 배열이 만들어진다.
  • 2글자의 문자열을 생성하면, 2글자의 문자열 + 16 배열 = 길이 18이 된다.
  • append : 문자열을 추가한다. (모든 타입이 가능하다.)
  • 문자열 abc를 가지는 sb가 생성된다.
  • sb2는 boolean 값이지만, char 타입이므로 abc 뒤에 true문자열이 붙는다.
  • 문자 d와 10.0을 뒤에 추가한다.(f는 접미사라 붙지 않는다.)
  • sb3은 ABC와 123을 추가한다.
  • 결국, sb와 sb2, sb3 모두 같은 StringBuffer 객체를 가르키게 된다.

StringBuffer의 생성자와 메서드(2/4)

  • capacity : 버퍼 크기를 알려준다. / length : 문자열의 길이를 알려준다.
  • charAt : 지정된 위치의 문자를 반환한다.
  • delete : 시작위치 ~ 끝위치까지의 문자를 삭제한다. (문자 n개 제거) / 끝 문자는 제외
  • deleteCharAt : 지정된 위치의 문자 제거 (문자 1개 제거)

StringBuffer의 생성자와 메서드(3/4)

  • insert : 지정된 위치에 여러 타입의 값 추가(position은 지정된 위치) / append는 위치 지정 X
  • length : StringBuffer에 저장되어 있는 문자열의 길이를 반환
  • replace : 시작위치 ~ 끝위치까지의 문자를 변경한다.
  • reverse : 문자열의 순서를 거꾸로 나열한다.

StringBuffer의 생성자와 메서드(4/4)

  • setChartAt : 문자를 주어진 문자로 바꾼다.
  • setLength : 문자열의 길이를 변경한다. (기존의 값보다 더 길게 변경할 경우 null문자가 추가된다.)
  • toString : StringBuffer를 String으로 변경한다.
  • subString : 문자열의 일부를 잘라낸다. (end가 없다면, 시작위치~끝 / end가 있다면, 시작위치~끝위치)

StringBuffer의 생성자와 메서드 - 예제

  • sb(0x100) -> 01
  • sb2(0x100) -> 0123
  • append -> 0123456 // 메서드 체이닝 : 메서드를 연결해서 호출하는 것.
  • sb3(0x100) -> 012345678
  • sb3.append -> 0123456789.0
  • sb.deleteAt(10) -> 10의 자리수까지 반올림(01234567890)
  • sb.delete(3,6) -> 3번째 자리~6번째 자리 삭제(01267890)
  • sb.insert(3,"abc") -> 3번째 자리에 abc 추가 (012abc67890)
  • sb.replace(6, sb.length(), "END") -> 6자리의 문자열로 만들고, 뒤에 END를 추가(012abcEND)
  • capacity -> 배열의 길이(18자리)
  • length -> 문자열의 길이(9자리)
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글