KH/JAVA

# 33 StringBuffer , StringTokenizer

오늘의 진 2022. 7. 27. 10:00

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