JAVA_49_StringBuffer 클래스

charl hi·2021년 9월 7일
0

JAVA

목록 보기
49/53
post-thumbnail
  • 내용변경해도 계속 같은 객체를 가리킴

  • StringBuffer.equals는 주소비교

  • 생성방법
    : StringBuffer()

  • 결합
    : append()

  • (문자 배열, 버퍼)크기
    : capacity()

  • (실제로 담긴 문자열)길이
    : length()

  • 인덱스 검사
    : charAt()

  • 삭제
    : delete(int,int), deleteCharAt(int)

  • 삽입
    : insert(int,타입)

  • 치환
    : replace(int,int,String), setCharAt(int,char)

  • 뒤집기
    : reverse()

  • 길이 변경
    : setLength()

  • 문자열String로 변환
    : substring()

  • 잘라내기, String 반환
    : substring(int), substring(int,int)

  • 비교
    : (A.toString()).equals.(B.toString())

StringBuffer

  • String처럼 문자형 배열char[]을 내부적으로 갖고 있다.
  • String과 달리 ✨✨내용 변경 가능하다.

StringBuffer sb = new StringBuffer("abc");

sb.append("123");

->

sb = "abc123"

!!! ✨기존 객체를 가리킨다 !!!

  • ✨✨반환형이 참조형, StringBuffer


생성자 활용한 길이

링크텍스트

기본적으로 길이가 +16?



여러 개를 결합할 때

(Δ) 이것보단

StringBuffer sb = new StringBuffer("abc");
sb.append("123");
sb.append("zzz");

(O) ✨요거로!!

StringBuffer sb = new StringBuffer("abc");
sb.append("123").append("zzz");

더 바람직하다!



주의해야 할 점

  • 📢📢📢StringBuffer에는 equals()가 오버라이딩이 되어있지 않다!!!
StringBuffer sb1 = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");

boolean b1 = (sb1 == sb2)?	//주소비교니 당연히 false
boolean b2 = sb1.equals(sb2);	//오버라이딩 안되어있으므로 주소비교니까 false

  • ✨✨✨toString() 사용해서 String으로 변환 -> equals()로!
StringBuffer sb1 = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");

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

boolean b2 = sb1.equals(sb2);	
//String클래스의 equals는 내용비교이므로 true



StringBuffer()

StringBuffer()

StringBuffer(int)

StringBuffer(int capacity?)

-지정된 개수capacity?만큼의 버퍼크기를 갖는 StringBuffer타입의 인스턴스를 생성한다.

StringBuffer(String)

StringBuffer(String str)

  • 지정된 문자열str을 갖는 StringBuffer타입의 인스턴스를 생성한다.
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = new StringBuffer(10);
StringBuffer sb3 = new StringBuffer("abc");

->

sb = ""
sb2 = ""
sb3 = "abc"


append()

StringBuffer append(기본타입 변수)
StringBuffer append(String str)
StringBuffer append(Object obj)

  • 등 모든 타입 가능
  • 문자열 뒤에 문자열 결합
  • ✨✨✨반환타입 = StringBuffer

선생님 죄송해요 너무 치기 귀찮았어요....



capacity()

int capacity()

  • StringBuffer인스턴스의 ✨버퍼크기(char[])를 알려준다.

length()

int length()

  • 버퍼에 담긴 ✨문자열의 길이 반환
StringBuffer sb = new StringBuffer(100);	//버퍼크기(배열크기) 100
sp.apend("abcd");
int buffersize = sb.capacity();
int stringsize = sb.length();

->

buffersize = 100
stringsize = 4	//"abcd"


charAt()


delete()

StringBuffer delete(int start, int end)

  • 시작위치start부터 끝위치✨end - 1에 있는 문자 제거
  • ✨✨✨반환타입 = StringBuffer
StringBuffer sb = new StringBuffer("0123456")
StringBuffer sb2 = sb.delete(3, 6);	//index=3 ~ 5 까지 삭제

->

sb2 = "0126"


deleteCharAt()

StringBuffer deleteCharAt(int index)

  • 지정된 위치index문자 1개를 제거
  • ✨✨✨반환타입 = StringBuffer
StringBuffer sb = new StringBuffer("0123456")
StringBuffer sb2 = sb.deleteCharAt(3);	//index=3 삭제

->

sb2 = "012456"


insert()

StringBuffer insert(int pos, 기본타입 변수)
StringBuffer insert(int pos, String str)
StringBuffer insert(int pos, Object obj)

  • append()와 달리 지정된 위치pos(0~) 에 해당 매개변수를 문자열로 변환하여 삽입한다.
  • pos == index부터 맨뒤까지의 문자열을 뒤로 미룬 다음 -> 문자열로 변환한 해당 매개변수를 집어 넣는다.
StringBuffer sb = new StringBuffer("0123456");
sb.insert(4, '.');
//index=4부터 뒤로 밀리고 pos=4부터 해당 문자열 넣기

->

sb = "0123.456"


replace()

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

  • 시작위치start부터 ✨끝위치end - 1까지문자열str로 치환한다.
StringBuffer sb = "0123456";
sb.replace(3, 6, "AB");
//index=3~5 ("345")를 "AB"로 치환

->

sb = "012AB6"


reverse()

StringBuffer reverse()

  • 문자열의 순서를 거꾸로 나열. 뒤집기
StringBuffer sb = "0123456";
sb.reverse();

->

sb = "6543210"


setCharAt()

StringBuffer setCharAt(int index, char ch)

  • 지정된 위치index의 문자를 주어진 문자ch 하나로 바꾼다.
StringBuffer sb = new StringBuffer("0123456");
sb.setCharAt(5, 'o');
//index=5 인 '5'를 'o'로

->

sb = "01234o6"


setLength()

void setLength(int newLength)

  • 길이 변경
  • 길이를 늘리는 경우 나머지 빈 공간을 널문자\u0000
StringBuffer sb = new StringBuffer("0123456");
sb.setLength(5);

StringBuffer sb2 = new StringBuffer("0123456");
sb2.setLength(10);
String str = sb2.toString().trim();
//sb2를 문자열로 변환하고 양쪽의 공백을 지운다.

->

sb = "01234"
sb2 = "0123456   "
str = "0123456"


toString()

String toString()

  • StringBuffer인스턴스의 문자열을 String으로 반환


substring()

String substring(int start)
String substring(int start, int end)

  • index = 시작위치start부터 끝까지 또는 끝위치end - 1까지 일부 잘라내서 ✨✨String으로 반환한다.
StringBuffer sb = new StringBuffer("0123456");
String str = sb.substring(3);	//index=3부터 끝까지 잘라내서 반환
String str2 = sb.substring(3, 5);	//index=3 ~ 4를 잘라내서 반환

->

str = "3456"
str2 = "34"


Ex9_12

StringBuffer sb = new StringBuffer("01");

StringBuffer sb2 = sb.append(23);

sb.append('4').append(56);

StringBuffer sb3 = sb.append(78);
sb3.append(9.0);

  • 메소드가 똑같이 적용되고, ✨다 같은 객체를 가리킨다!

  • "0123456789.0"

  • capacity = 18

  • length = 12



sb.deleteCharAt(10);

  • "01234567890"

  • capacity = 18

  • length = 11



sb.delete(3, 6);

  • index=3 ~ 5

  • "01267890"

  • capacity = 18

  • length = 8



sb.insert(3, "abc")

  • ✨✨✨밀려난다!!

  • "012abc67890"

  • capacity = 18

  • length = 11



sb.replace(6, sb.length(), "END")

  • length() = 11

  • ✨index = 6 ~ 10

  • 차례로 지우고, 채운다

  • "012abcEND"

  • capacity = 18

  • length = 9




Ref

0개의 댓글

관련 채용 정보