[JAVA]19일차(StringBuffer 클래스)

정효진·2021년 8월 10일
0

Developer Study

목록 보기
28/47
post-thumbnail

8월10일(화)

Test133(이어서 String에 작성완료)~Test139

  • 임시로 물을 가둬둔 공간이 버퍼!

  • 문자열을 다루는 클래스는 String / StringBuffer / StringBuilder가 있다.

  • String 은 편하고

  • StringBuffer는 기능이 많고

  • StringBuilder는 성능이 좋다.

◼ StringBuffer 클래스

▪ String / StringBuffer / StringBuilder

StringBuffer 클래스는 문자열을 처리하는 클래스로
String 클래스와의 차이점은
String 클래스내부 문자열 데이터의 수정이 불가능하지만
StringBuffer 클래스는 문자열을 사용할 때
내부 문자열을 실행 단계(런타임 시점)에서 변경할 수 있다.

즉, StringBuffer 객체는 가변적인 길이를 가지므로
객체를 생성하는 시점에서 미리 그 크기나 값을 지정하거나
실행 시점에 버퍼의 크기를 바꿀 수 있는 기능을 제공한다.

또한, JDK 1.5 이후부터는
문자열을 처리하는 StringBuilder라는 클래스도 제공한다.
StringBuilder 클래스의 기능은 StringBuffer 클래스와 동일하지만
가장 큰 차이점은 multi-thread unsafe 라는 점이다.

즉, Syncronization 이 없기 때문
StringBuffer 보다 빠르며 동시성(동기화) 문제가 없다면
StringBuilder를 사용하는 것이 성능을 향상시킬 수 있다.

▪ StringBuffer 클래스 코드 설명1📝

public class Test134
{
	public static void main(String[] args)
	{
		StringBuffer sb1 = new StringBuffer("korea");
		StringBuffer sb2 = new StringBuffer("korea");
		
		System.out.println(sb1 == sb2);
		System.out.println(sb1.equals(sb2));
		//--==>> false
		//--==>> false
		// StringBuffer는 서로 주소값 비교!
		// String이었다면 equals를 쓰면 true로 나옴 => StringBuffer는 오버라이드 하지 않았다.

		System.out.println(sb1);
		//                 ---- 이만큼이 StringBuffer타입
		//--==>> korea
		// toString은 오버라이딩 했다!

		System.out.println(sb1.toString());
		//                ---------------  이만큰이 문자열
		//--==>> korea

		System.out.println(sb1.toString().equals(sb2.toString()));
		//--==>> true
		// 여기서 쓴 equals는 String의 equals 위에 는 StringBuffer의 equals

		StringBuffer sb3 = new StringBuffer();
		//-- StringBuffer 기본 생성자 호출 시 (인스턴스 생성 과정)
		//	 기본적으로 생성되는 버퍼 크기는 『16』

		// capacity()
		System.out.println("버퍼 크기 : " + sb3.capacity());
		//--==>> 버퍼 크기 : 16

		////////////////////////////////////////////////////////////////////

		System.out.println(sb3);
		//--==>> 無

		String name = "홍길동";
		name += "이순신";
		name += "강감찬";
		System.out.println(name);
		//--==>> 홍길동이순신강감찬

		sb3.append("seoul");  //sb3 += "seoul"
		sb3.append("korea");
		sb3.append("우리나라");
		sb3.append("대한민국");

		System.out.println(sb3);
		System.out.println(sb3.toString());
		//--==>> seoulkorea우리나라대한민국
		//		 seoulkorea우리나라대한민국


		System.out.println("버퍼크기 : " + sb3.capacity());
		//--==>> 버퍼크기 : 34
		//버퍼의 크기는 한글자씩 늘어나는 것이 아니다!!(글자수 18)

		/////////////////////////////////////////////////////////////////////////

		String temp1 = "java and oracle";
		System.out.println(temp1.toUpperCase());
		//--==>> JAVA AND ORACLE   //대문자로 변환하는 메소드~_~

		String temp2 = "JAVA AND ORACLE";
		System.out.println(temp2.toLowerCase());
		//--==>> java and oracle

		//System.out.println(sb3.toUpperCase());
		//dSystem.out.println(sb3.toUpperCase());
		//--==>> 에러 발생(컴파일 에러)
		// sb3는 StringBuffer여서 String 클래스에는 존재하지만 String Buffer에는 존재하지 않음

		String temp3 = sb3.toString();
		System.out.println(temp3.toUpperCase());
		//--==>> SEOULKOREA우리나라대한민국


		// sb3는 아직 seoulkorea우리나라대한민국 담겨있음!
		System.out.println(sb3);
		//--==>> seoulkorea우리나라대한민국

		// ○ 대상 문자열(sb3) 중 seoul 앞에
		//		『"한국"』이라는 문자열 추가
		sb3.insert(0,"한국");
		System.out.println("seoul 앞에 『한국』 추가 : " + sb3.toString());
		//--==>> seoul 앞에 『한국』 추가 : 한국seoulkorea우리나라대한민국

		// sb3는 한국seoulkorea우리나라대한민국

		// ○ 대상 문자열(sb3) 중 korea 문자열 뒤에
		//		『"사랑"』이라는 문자열 추가
		//		단, 대상 문자열의 인덱스를 직접 확인하지 말고...

		
		// 테스트1 - 현재 sb3
		System.out.println(sb3.toString());
		//--==>> 한국seoulkorea우리나라대한민국

		// 테스트2 - 이렇게 해결가능하지만!
		//sb3.insert(12,"사랑");
		//System.out.println("korea 뒤에 『사랑』 추가 : " + sb3.toString());

		// 내가 푼것 
		//sb3.insert(sb3.lastIndexOf("우"),"사랑");
		//System.out.println("korea 뒤에 『사랑』 추가 : " + sb3.toString());
		//--==>> korea 뒤에 『사랑』 추가 : 한국seoulkorea사랑우리나라대한민국

		// 테스트 3
		//sb3.indexOf("korea");
		//System.out.println(sb3.indexOf("korea"));
		//--==>> 7

		// 함께 푼 코드
		//sb3.insert(sb3.indexOf("korea") + 5,"사랑");  //이렇게 되어야하고 (+5)
		//sb3.insert("korea"문자열인덱스 + "korea"문자열길이, "사랑");
		sb3.insert(sb3.indexOf("korea") + "korea".length(),"사랑"); 
		//          -------------------     ---------------
		//			       7                      5
		System.out.println("korea 뒤에 『사랑』 추가 : " + sb3.toString());
		//--==>> korea 뒤에 『사랑』 추가 : 한국seoulkorea사랑우리나라대한민국


		// ○ 『우리나라』	문자열 삭제    //--------delete() 메소드는 첫 번째 매개변수로 전달된 인덱스부터 
		//sb3.delete(14,18);               //--------두 번째 매개변수로 전달된 인덱스 바로 앞의 문자까지를 삭제하는 메소드
		//System.out.println(sb3);                                                     ----★---
		//--==>> 한국seoulkorea사랑대한민국

		sb3.delete(sb3.indexOf("우리나라"), + sb3.indexOf("우리나라") + "우리나라".length());
		//             -------------------     --------------------------------------------
		//			       14                                      18
		System.out.println(sb3);
		//--==>> 한국seoulkorea사랑대한민국

		// ○ 대상 문자열(sb3)에서
		//		『korea』이후 문자열 삭제(korea 포함)
		//		즉, 처리 결과 『한국 seoul』만 남도록...
		//sb3.delete(7,18);
		sb3.delete(sb3.indexOf("korea"),sb3.length());
		System.out.println(sb3);
		//--==>> 한국seoul

		////////////////////////////////////////////////////////////////////////////////////////

		// 버퍼 크기 확인
		System.out.println("버퍼 크기 : " + sb3.capacity());
		//--==>> 버퍼 크기 : 34                          //--check~!! 문자열의 길이는 늘려주는데 줄여주진 않음

		// 문자열(sb3)의 길이 확인
		System.out.println("문자열의 길이 : " + sb3.length());
		//--==>> 문자열의 길이 : 7

		// 버퍼 크기 조절
		// -> 현재 문자열을 담아둘 수 있는 버퍼의 크기로...
		sb3.trimToSize();

		// 버퍼 크기 조절 이후 버퍼 크기 다시 확인
		System.out.println("버퍼 크기 : " + sb3.capacity());
		//--==>> 버퍼 크기 : 7

	}
}

▪ StringBuffer 클래스 코드 설명2📝

public class Test135
{
	public static void main(String[] args)
	{
		String s1 = "123456789";
		s1 = (s1 + "123").replace('2','A');
		//"123456789"
		//"123456789123"
		//"1A34567891A3"
		System.out.println(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);
		//"456789".replace(1,3,"24").delete(4,6);
		//                 ---인텍스 1번째~3번째까지를 24로 바꿔라
		//"424789".delete(4,6);
		//"4247"

		System.out.println(s2);
		//--==>> 4247

		StringBuffer s3 = new StringBuffer("123456789");
		String s4 = s3.substring(3,6);
		//"123456789".substring(3,6);
		// "456"
		System.out.println(s4);
		//--==>> 456

		StringBuffer s5 = new StringBuffer("123456789");                            //-- check~!! 연습~!!
		s5.delete(0,3).delete(1,3).delete(2,5).insert(1,"24");
		//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);
		//--==>> 4247



	}
}
  • insert(k,"안뇽") 메소드를 사용하여 해당 문자열에서 인덱스가 k인 위치부터 두 번째 매개변수로 전달된 문자열 안뇽을 추가
  • delete() 메소드는 첫 번째 매개변수로 전달된 인덱스부터 두 번째 매개변수로 전달된 인덱스 바로 앞의 문자까지를 삭제하는 메소드
profile
개발새발

0개의 댓글