String 클래스의 단점
빈번하게 문자열 연산을 진행할 경우 메모리를 많이 차지하게 됨
매번 연산 할때마다 새로운 객체를 생성하게 됨
==> 메모리 영역의 과부하가 발생할 가능성이 큼
이러한 다점을 개선한 클래스가 등장 함
==> StringBuffer 클래스
<예시1>
=============================코드=============================
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("java ");
// 1. append() : 문자열을 추가해주는 메서드
System.out.println("문자열 추가 후 >>> " + sb.append("program"));
System.out.println();
// 2. replace() : 문자열을 교체하는 메서드
// 형식) replace(시작 index, 끝(-1) index, "교체할 문자열")
sb.replace(0, 4, "python");
System.out.println("문자열 교체 후 >>> " + sb);
System.out.println();
// 3. substring() : 문자열을 추출하는 메서드
// 형식1) substring(시작 index, 끝(-1) index)
// 형식2) substring(시작 index) ==> 문자열 끝까지
StringBuffer sb2 = new StringBuffer("2024/02/19 15:07:24");
System.out.println("오늘 날짜 >>> " + sb2.substring(0, 10));
System.out.println("현재 시간 >>> " + sb2.substring(11));
System.out.println();
System.out.println("reverse() >>> " + sb.reverse());
}

<예시2>
StringTokenizer 클래스
countTokens( ) : 기준 문자로 분리된 토큰의 갯수를 정수값으로 반환
hasMoreTokens( ) : 반환할 다음 토큰이 있는지를 확인. 있으면 true 값을 반환. 없으면 false 값을 반환
nextToken( ) : 존재하는 토큰을 문자열로 반환
=============================코드=============================
public static void main(String[] args) {
String str = "id-hong&pwd=1234&name=홍길동&age=27&phone=010-1111-1234&addr=서울시 구로구";
StringTokenizer st = new StringTokenizer(str, "&");
// countTokens() : 기준 문자로 분리된 토큰의 갯수를 정수값으로 반환해주는 메서드
System.out.println("토큰 수 >>> " + st.countTokens());
// hasMoreTokens() : 반환할 다음 토큰이 있는지를 확인하는 메서드
// 있으면 true 값을 반환. 없으면 false 값을 반환
while(st.hasMoreTokens()) {
//nextToken() : 존재하는 토큰을 문자열로 반환해주는 메서드
System.out.println(st.nextToken());
}
}
