StringBuffer와 StringBuilder의 등장
- String은 메모리를 많이 차지하게 된다. 그리하여 생긴 것이 버퍼와 빌더이다
- 이 클래스들은 모두 객체 내부에 있는 버퍼(buffer, 데이터를 임시로 저장하는 메모리)에 문자열의 내용을 저장해 두고 그 안에서 추가, 수정, 삭제 작업이 가능하다
따라서 이 클래스들은 이용하면 새로운 객체를 만들지 않고도 문자열 조작을 할 수 있다.
- StringBuffer와 StringBuilder는 거의 비슷하지만 StringBuilder가 속도가 더 빠르다
StringBuilder 주요 기능(메소드)
- append(String str) : 문자열 str 추가
- insert(int index, String str) : 특정 index에 문자열 str 추가
- delete(int start, int end) : index위치 start부터 end앞 까지 삭제
- deleteCharAt(int index) : index위치의 특정 문자 하나 삭제
- int capacity() : 문자열 크기 반환
- ensureCapacity(int size) : 버퍼의 크기를 size만큼 늘리는 메소드
- trimToSize() : 과도한 버퍼 크기를 적당하게 줄이는 메소드
package com.lec.ex1_string;
public class Ex09_StringBuffer {
public static void main(String[] args) {
String str = "abc";
StringBuffer strbuffer = new StringBuffer("abc");
System.out.println("strBuffer의 해쉬코드 : " + strbuffer.hashCode());
strbuffer.append("def"); //뒤에 def 추가
System.out.println("append 후 : " + strbuffer);
System.out.println("strBuffer의 해쉬코드 : " + strbuffer.hashCode());
strbuffer.insert(3, "aaa"); //3번째에 aaa 추가
System.out.println("insert 후 : " + strbuffer);
System.out.println("strBuffer의 해쉬코드 : " + strbuffer.hashCode());
strbuffer.delete(3, 6);
System.out.println("delete 후 : " + strbuffer);
System.out.println("strBuffer의 해쉬코드 : " + strbuffer.hashCode());
int capacitySize = strbuffer.capacity();
System.out.println("버퍼의 가용크기 :" + capacitySize);
strbuffer.append("abcefjhksjdhfhfhfhffhfhfhhfh");
System.out.println("append 후 : "+strbuffer);
System.out.println("해쉬코드 : " + strbuffer.hashCode());
System.out.println("많은 문자를 추가한 후 가용크기 : " + strbuffer.capacity());
}
}
strBuffer의 해쉬코드 : 366712642
append 후 : abcdef
strBuffer의 해쉬코드 : 366712642
insert 후 : abcaaadef
strBuffer의 해쉬코드 : 366712642
delete 후 : abcdef
strBuffer의 해쉬코드 : 366712642
버퍼의 가용크기 :19
append 후 : abcdefabcefjhksjdhfhfhfhffhfhfhhfh
해쉬코드 : 366712642
많은 문자를 추가한 후 가용크기 : 40
StringTokenizer
public class Ex11_StringTokenizer {
public static void main(String[] args) {
String str1 = "박보검 설현 수지 고소영 장동건";
String str2 = "100-90-85-76";
StringTokenizer tokenizer1 = new StringTokenizer(str1); //구분자는 space
StringTokenizer tokenizer2 = new StringTokenizer(str2, "-"); //구분자는 -
System.out.println("tokenizer1의 토큰 갯수 : " + tokenizer1.countTokens());
System.out.println("tokenizer2의 토큰 갯수 : " + tokenizer2.countTokens());
while(tokenizer1.hasMoreTokens()) {
System.out.println(tokenizer1.nextToken());
}
while(tokenizer2.hasMoreTokens()) {
System.out.println(tokenizer2.nextToken());
}
}
}
tokenizer1의 토큰 갯수 : 5
tokenizer2의 토큰 갯수 : 4
박보검
설현
수지
고소영
장동건
100
90
85
76