기록 저장소
[Java #21] lang package_StringBuffer Class 본문
[ StringBuffer Class ]
1. constructor
1) StringBuffer()
- default 생성자
- 크기 16의 비어있는 임시 저장공간 생성
StringBuffer sb1 = new StringBuffer();
System.out.println("크기" + sb1.capacity() + "문자열 수 : " + sb1.length()); //크기 16, 문자열 수 0
2) StringBuffer(int capacity)
- 인자값만큼의 임시저장 공간 생성
- 통상 8의 배수로 사용함
- 문자열로 StringBuffer를 생성해도 글자수보다 큰 공간이 잡히기 때문에 별 의미 없음
3) StringBuffer(CharSequence seq) | StringBuffer(String str)
- 문자열을 가지고 임시저장 공간 생성 (문자열의 크기보다 큰 공간이 생성됨)
- CahrSequence는 interface이며, StringBuffer로 구현되어있기 때문에 둘은 같은거나 마찬가지임
StringBuffersb1 = new StringBuffer("hello");
System.out.println("sb1 == " + sb1); //sb1 == hello
System.out.println("크기" + sb1.capacity() + "문자열 수 : " + sb1.length()); //크기 21, 문자열 수 5
4) 추가 내용
▷ StringBuffer의 저장공간을 넘어서면 자동으로 크기가 늘어남
StringBuffer sb1 = new StringBuffer("hello");
sb1.append(" java");
sb1.append(" !!!!!");
System.out.println("sb1 == " + sb1);//hello java !!!!!
System.out.println("크기" + sb1.capacity() + "\t문자열 수 : " + sb1.length()); // 크기 21, 문자열 수 16
sb1.append(" !!!!!!");
System.out.println("sb1 == " + sb1);//hello java !!!!! !!!!!!
System.out.println("크기" + sb1.capacity() + "\t문자열 수 : " + sb1.length()); // 크기 44, 문자열 수 23
2. method
1) capacity()
- 저장공간크기를 int로 반환
StringBuffer sb1 = new StringBuffer("hello");
int cap = sb1.capacity();
System.out.println(cap);
2) length()
- 문자열의 크기를 int로 반환
StringBuffer sb1 = new StringBuffer("hello");
System.out.println("문자열 수 : " + sb1.length());
3) append()
- 문자열을 더해서 StringBuffer로 반환
sb1.append(" java");
System.out.println("2. sb1 == " + sb1);//hello java
- 문자열에 변경을 가하면 새로운 문자열이 생성되는 것과 달리, StringBuffer는 인스턴스 자체가 변경됨
StringBuffer sb1 = new StringBuffer("hello");
sb1.append(" java");
System.out.println("2. sb1 == " + sb1);//hello java
//cf.
String s = "hello";
s.concat("java");
System.out.println(s);//hello
4) charAt(int index)
- index의 문자를 char로 반환
5) insert(int offset, 입력할 data)
- offset index 위치에 인자값을 추가하여 StringBuffer로 반환
StringBuffer sb1 = new StringBuffer(hello java !!!!! !!!!!!);
sb1.insert(10, "@@@");
System.out.println(sb1 == " + sb1); // sb1 == hello java@@@ !!!!! !!!!!!
6) delete(int start, int end)
- start부터 end 위치 전까지 삭제하고 StringBuffer 반환
StringBuffer sb1 = new StringBuffer(hello java !!!!! !!!!!!);
sb1.delete(10, 12);
System.out.println("sb1 == " + sb1); //sb1 == hello java@ !!!!! !!!!!!
7) deleteCharAt(int index)
- index 위치의 문자를 삭제하고 StringBuffer 반환
sb1.deleteCharAt(10);
System.out.println("sb1 == " + sb1); //sb1 == hello java !!!!! !!!!!!
8) indexOf(String str)
- 인자값이 위치한 index를 int로 반환
- 없는 경우에는 -1로 반환
▷ 예제
String str = "hello 자바 !!!";
String findstr = "자바"; // | String findstr = "오라클";
String restr = "java";
//str에 findstr이 있으면 해당 문자열을 restr로 변경하고 (hello java !!!)
// 없으면 (오라클은 없습니다.) 출력
9) replace(int start, int end, String str)
- start 부터 end전까지 str로 대체하고 StringBuffer를 반환
- cf. String의 replace와 비교할 것!
StringBuffer sb1 = new StringBuffer(hello java !!!!! !!!!!!);
sb1.replace(6, 10, "자바");
System.out.println("sb1 == " + sb1); //sb1 == hello 자바 !!!!! !!!!!!
10) reverse()
StringBuffer sb1 = new StringBuffer(hello java !!!!! !!!!!!);
System.out.println("sb1 == " + sb1); // sb1 == !!!!!! !!!!! avaj olleh
11) toString()
- String으로 반환
//StringBuffer를 String으로 변환하는 2가지 방법
//1. String 생성자 이용
String s1 = new String(sb1);
//2. StringBuffer의 toString()이용
String s2 = sb1.toString();
3. 추가내용
▷ 예제
long st = System.nanoTime();
String str = "hello ";
for(int i = 0; i <50000; i++) {
str += i;
}
System.out.println(System.nanoTime() - st);
st = System.nanoTime();
StringBuffer sb = new StringBuffer("hello");
for(int i = 0; i <50000; i++) {
sb.append(i);
}
System.out.println(System.nanoTime() - st);
// 결론 : 문자열을 더할때는 StringBuffer로!
'kitri 노트 > java' 카테고리의 다른 글
JTable - DefaultTableModel 사용 (0) | 2019.04.08 |
---|---|
[Java #22] util package (0) | 2019.03.27 |
[Java #20] lang package_String Class (0) | 2019.03.25 |
[Java #19] lang package_Wrapper Class-수정 (0) | 2019.03.25 |
[Java #18] array (0) | 2019.03.25 |