○ StringBuffer 클래스
- 문자열을 처리하는 클래스로 String 클래스와의 차이점은 문자열을 사용할 때 내부 문자열을 실행 단계에서 변경할 수 있다.
- 즉, StringBuffer 객체는 가변적인 길이를 가지므로 객체를 생성하는 시점에서 미리 그 크기나 값을 지정하거나 시행 시점에 버퍼의 크기를 바꿀 수 있는 기능을 제공한다.
- JDK 1.5 이후로는 StringBuilder라는 클래스도 제공한다. StringBuffer와 가장 큰 차이점은 multi-thread unsafe 라는 점이다. 즉, 동기화 문제가 없다면 StringBuilder를 사용하는 것이 성능을 향상시킬 수 있다.
▼ Test138
.insert()는 변수에 값을 담아주지 않아도 값이 바뀜.
public class Test138
{
public static void main(String[] args)
{
String str1 = new String("seoul");
String str2 = new String("seoul");
System.out.println(str1 == str2);
System.out.println(str1.equals(str2)); // 주소 비교가 아닌 데이터 값 비교, object꺼 받아서 오버라이딩 함
//--==>> false
// true
StringBuffer sb1 = new StringBuffer("korea");
StringBuffer sb2 = new StringBuffer("korea");
System.out.println(sb1 == sb2);
System.out.println(sb1.equals(sb2)); // object꺼 오버라이딩 안함
//--==>> false
// false
System.out.println("----------------------------------------------------------------");
System.out.println(sb1);
//--==>> korea 스트링버퍼에서 object의 toString을 오버라이딩 했구나
System.out.println(sb1.toString());
//--==>> korea 스트링을 출력
System.out.println(sb1.toString().equals(sb2.toString())); // 스트링의 equals()
//--==> true
System.out.println("----------------------------------------------------------------");
StringBuffer sb3 = new StringBuffer();
//-- StringBuffer 기본 생성자 호출(인스턴스 생성 과정)
// 기본적으로 생성되는 버퍼의 크기는 『16』
// capacity()
System.out.println("버퍼 크기 : " + sb3.capacity());
//--==>> 버퍼 크기 : 16
//////////////////////////////////////////////////////
System.out.println(sb3);
//--==>> 無
/*
String name = "박가영";
name += "박나영";
name += "박범구";
name += "엄재용"; // name의 주소값이 바껴서 다른걸 참조. 내용이 바뀌는 것이 아님
System.out.println(name);
//--==>> 박가영박나영박범구엄재용
*/
sb3.append("seoul"); // sb3 += "seoul";
sb3.append("korea"); // sb3 += "korea";
sb3.append("우리나라"); // sb3 += "우리나라";
sb3.append("대한민국"); // sb3 += "대한민국";
System.out.println(sb3);
//--==>> seoulkorea우리나라대한민국 스트링 버퍼 타입으로 반환
System.out.println(sb3.toString());
//--==>> seoulkorea우리나라대한민국 스트링 타입으로 반환
// 버퍼 크기 다시 확인
System.out.println("버퍼 크기 : " + sb3.capacity());
//--==>> 버퍼 크기 : 34
/////////////////////////////////////////////////////////
String temp1 = "java and oracle";
System.out.println(temp1.toUpperCase()); //toUpperCase 메소드는 스트링꺼임!
//--==>> JAVA AND ORACLE
String temp2 = "JAVA AND ORACLE";
System.out.println(temp2.toLowerCase());
//--==>> java and oracle
//System.out.println(sb3.toUpperCase());
//System.out.println(sb3.toLowerCase());
//--==>> 에러 발생(컴파일 에러)
// sb3 = seoulkorea우리나라대한민국
String temp3 = sb3.toString();
System.out.println(temp3.toUpperCase());
//--==>> SEOULKOREA우리나라대한민국
System.out.println(sb3.toString().toUpperCase());
//--==>> SEOULKOREA우리나라대한민국
// sb3 = seoulkorea우리나라대한민국
// ○ 대상 문자열(sb3 → "seoulkorea우리나라대한민국") 중
// "seoul" 문자열 앞에 "한국" 이라는 문자열 추가
// 즉, 『한국seoulkorea우리나라대한민국』 으로 구성
sb3.insert(0, "한국"); // sb3 자체 값이 바뀜, 다른 것처럼 변수에 넣어주지 않아도
System.out.println("seoul 앞에 『한국』 추가 : " + sb3);
//--==>> seoul 앞에 『한국』 추가 : 한국seoulkorea우리나라대한민국
System.out.println("seoul 앞에 『한국』 추가 : " + sb3.toString());
//--==>> seoul 앞에 『한국』 추가 : 한국seoulkorea우리나라대한민국
// ○ 대상 문자열(sb3 → "한국seoulkorea우리나라대한민국") 중
// "korea" 문자열 뒤에 "사랑" 이라는 문자열 추가
// 단, 대상 문자열의 인덱스를 눈으로 직접 확인하지 않고...
// 즉, 『한국seoulkorea사랑우리나라대한민국』 으로 구성
// 테스트 ①
System.out.println(sb3.toString());
//--==>> 한국seoulkorea우리나라대한민국
// 테스트 ②
//sb3.insert(12, "사랑");
//System.out.println("korea 뒤에 『사랑』 추가 : " + sb3);
//--==>> korea 뒤에 『사랑』 추가 : 한국seoulkorea사랑우리나라대한민국
//System.out.println("korea 뒤에 『사랑』 추가 : " + sb3.toString());
//--==>> korea 뒤에 『사랑』 추가 : 한국seoulkorea사랑우리나라대한민국
// 테스트 ③
// sb3.indexOf("korea");
System.out.println(sb3.indexOf("korea"));
//--==>> 7
// 테스트 ④
//System.out.println(sb3.insert(sb3.indexOf("korea")), "사랑");
//--==>> 한국seoul사랑korea우리나라대한민국
// 테스트 ⑤
//System.out.println(sb3.insert(sb3.indexOf("korea")+5, "사랑"));
//--==>> 한국seoulkorea사랑우리나라대한민국
// 테스트 ⑥
System.out.println(sb3.insert(sb3.indexOf("korea") + "korea".length(), "사랑"));
//--==>> 한국seoulkorea사랑우리나라대한민국
System.out.println(sb3.toString());
//--==>> 한국seoulkorea사랑우리나라대한민국
// ○ 대상 문자열(sb3) 에서
// 『"우리나라"』 문자열 삭제
//sb3.delete(14, 18);
//System.out.println(sb3);
//--==>> 한국seoulkorea사랑대한민국
//sb3.delete(14,18);
// ┬ ┬
// │ └ sb3.indexOf("우리나라") + "우리나라".length()
// │
// sb3.indexOf("우리나라")
sb3.delete(sb3.indexOf("우리나라"), sb3.indexOf("우리나라") + "우리나라".length());
System.out.println(sb3);
//--==>> 한국seoulkorea사랑대한민국
// ○ 대상 문자열(sb3) 에서
// 『"korea"』 이후 모든 문자열 삭제(korea 포함)
// 한국seoulkorea사랑대한민국 → 한국seoul
//sb3.delete(7,18);
//System.out.println(sb3);
//--==>> 한국seoul
//sb3.delete(7); 에러 발생 이렇게 사용할 수 없다.
//System.out.println(sb3.toString());
// sb3.delete( 7, 18);
// ┬ ┬
// │ └ sb3.length()
// │
// sb3.indexOf("korea")
sb3.delete(sb3.indexOf("korea"), sb3.length());
System.out.println(sb3);
//--==>> 한국seoul
/////////////////////////////////////////////////////////////////////
// 버퍼 크기 다시 확인
System.out.println("버퍼 크기 : " + sb3.capacity());
//--==>> 버퍼 크기 : 34
// 늘어나는 건 자동으로 늘어나지만 저장된 값이 적어진다고 해서 크기가 줄어들지 않음
// 문자열(sb3)의 길이 확인
System.out.println("문자열의 길이 : " + sb3.length());
//--==>> 문자열의 길이 : 7
// 버퍼 크기 조절
// → 현재 문자열을 담아둘 수 있는 버퍼의 크기로...
// trimToSize()
sb3.trimToSize();
// 버퍼 크기 조절 이후 버퍼 크기 다시 확인
System.out.println("버퍼 크기 : " + sb3.capacity());
//--==>> 버퍼 크기 : 7
}
}
▼ Test139
public class Test139
{
public static void main(String[] args)
{
String s1 = "123456789";
s1 = (s1+"123").replace('2', 'A');
// "123456789"
// "123456789123"
// "1A34567891A3"
System.out.println("s1 : " + s1);
//--==>> s1 : 1A34567891A3
StringBuffer s2 = new StringBuffer("123456789");
s2.delete(0,3).replace(1,3,"24").delete(4,6);
// "123456789";
// "123456789".delete(0,3).replace(1,3,"24").delete(4,6);
// "456789".replace(1,3,"24").delete(4,6);
// "424789".delete(4,6);
// "4247"
System.out.println("s2 : " + s2);
//--==>> s2 : 4247
StringBuffer s3 = new StringBuffer("123456789");
String s4 = s3.substring(3,6); // 스트링버퍼에서 얻어낸 값을 스트링에 넣었기 때문에 리턴 값은 스트링
//--==>> "123456789"
//--==>> "123456789".substring(3,6)
//--==>> "456"
System.out.println("s4 : " + s4);
//--==>> s4 : 456
StringBuffer s5 = new StringBuffer("123456789");
s5.delete(0, 3).delete(1, 3).delete(2, 5).insert(1,"24");
// "123456789"
// "123456789".delete(0, 3).delete(1, 3).delete(2, 5).insert(1,"24");
// "456789".delete(1, 3).delete(2, 5).insert(1,"24");
// "4789".delete(2, 5).insert(1,"24"); // 배열 길이 넘어가도 에러 나지 않고 삭제됨
// "47".insert(1,"24");
// "4247"
System.out.println("s5 : " + s5);
//--==>> s5 : 4247
}
}