StringBuffer
JVM은 String 클래스에 문자열을 추가할때 내부적으로 StringBuffer 클래스로 변환해 처리합니다.
문자열 "가"와 "나"를 결합시키는 과정은
String ABC("가","나");
StringBuffer ABC("가나");
String ABC("가나"); >> 형식으로 바뀐다.
빈번한 문자열의 교차, 생성, 수정이 있다면 String 보다는 StringBuffer을 사용하는 것이 좋다. 더 빠르다.
버퍼가 기본적으로 16개의 문자를 담을수 있는 공간을 만들어준다.
스트링 버퍼는 하나의 클래스 개념으로 객체를 생성하여 사용하여야 한다.
(예)
package ja_0727;
public class StringBuffer_1 {
public static void main(String[] args) {
StringBuffer stbf_1 = new StringBuffer("Java");
StringBuffer stbf_2 = new StringBuffer(10);
StringBuffer stbf_3 = new StringBuffer();
System.out.println("stbf_1.length() : " + stbf_1.length());// 4
System.out.println("stbf_1.capacity() : " + stbf_1.capacity()); // 20
// capacity() : 현재 문자열의 버퍼크기
System.out.println();
System.out.println("stbf_2.length() : " + stbf_2.length()); // 0
System.out.println("stbf_2.capacity() : " + stbf_2.capacity());// 10
System.out.println();
System.out.println("stbf_3.length() : " + stbf_3.length()); // 0
System.out.println("stbf_3.capacity() : " + stbf_3.capacity()); // 16
// 버퍼가 기본적으로 16개의 문자를 담을수 있는 공간을 만들어준다.
}
}
capacity() : 현재 문자열의 버퍼크기
(예) insert / append
package ja_0727;
public class StringBuffer_2 {
public static void main(String[] args) {
// 스트링버퍼는 하나의 클래스 개념으로 객체를 생성하여 사용하여야 한다.
StringBuffer stbf = new StringBuffer("Java");
stbf.append(" program"); //Sbf에서는 append : 추가하다 이용
System.out.println(stbf);
for (int i = 0; i < stbf.length(); i++) {
System.out.print(stbf.charAt(i) + "\t");
}
System.out.println();
// 역순으로 글자 출력
for (int i = stbf.length() - 1; i >= 0; i--) {
System.out.print(stbf.charAt(i) + "\t");
}
stbf.insert(4, "★"); // 인덱스 4번에 ★을 넣겠다는 말 insert : 삽입
System.out.println("\n" + stbf);
System.out.println("문자열의 길이 : " + stbf.length());
stbf.setLength(5); // 길이를 5로 만들겠다.(길이 5까지로 잘라냄)
System.out.println("새로운 문자열의 길이 : " + stbf.length());
System.out.println("setLength(5) 적용 문자열 : " + stbf);
System.out.println("반전 문자열 : " + stbf.reverse()); //reverse : 문자열을 반전시켜주는 메소드
}
}
(예) String과 StringBuffer의 속도차이
package ja_0727;
public class StringBuffer_3 {
public static void main(String[] args) {
long start, end;
String str_1 = new String("1~70000의 합 11 : ");
StringBuffer stbf_2 = new StringBuffer("1~70000의 합 22 : ");
start = System.currentTimeMillis();
for (int i = 0; i < 70000; i++) {
str_1 += i;
str_1 += "+";
}
end = System.currentTimeMillis();
System.out.println("String Time : " + (end - start));
start = System.currentTimeMillis();
for (int i = 0; i < 70000; i++) {
stbf_2.append(i);
stbf_2.append("+");
}
end = System.currentTimeMillis();
System.out.println("StringBuffer Time : " + (end - start));
}
}
StringTokenizer
package ja_0727;
import java.util.StringTokenizer;
public class StringTokenizerTest {
public static void main(String[] args) {
String str = "자바는$ 다양한, 문자열 처리, 날짜처리," + "시간처리, 를 위한$ 메소드를, 갖고$ 있습니다.";
StringTokenizer stt = new StringTokenizer(str, ",$"); // 구분자를 여러개 한꺼번에 적을 수 있다.
System.out.println("토큰 ',$'의 수 : " + stt.countTokens());
while (stt.hasMoreTokens()) { // stt에 토큰이 있을때 까지 while문을 반복시켜라
System.out.println(stt.nextToken()); //토큰반환
}
}
}
'KH > JAVA' 카테고리의 다른 글
# 35 Generics (제너릭) , Collection(컬렉션)- vector , ArrayList (0) | 2022.07.27 |
---|---|
# 34 Math.random( ) , Random Class (0) | 2022.07.27 |
# 32 String (0) | 2022.07.25 |
# 31 Wrapper Class (0) | 2022.07.25 |
# 29 동기화( Synchronization ) / ATM 만들기 (0) | 2022.07.22 |