String 클래스

Posted in Programming/java by

자바에서 문자열을 모두 String 클래스로 관리한다. String 클래스는 현제 객체를 조작하는 것이아니라 새로운 String 객체를 생성해 낸다. 따라서 문자열 조작을 하기 위해서는 StringBuilder 클래스와 StringBuffer 클래스를 사용한다. StringBuffer는 쓰레드에서 데드락을 방지하는 장치가 있고 StringBuilder 클래스는 없다.


1. String

자바에서 리터럴 문자는 String 문자로 치환된다.

   1:  str1 = new String("Hi");
   2:  str2 = new String("Hi");

위와 같은 경우는 4개가 아니라 3개의 String 이 생성된다. 같은 내용의 문자열을 하나의 String 객체로 공유한다.

 

2. StringBuilder

생성자에 문자열을 넘기면 문자열 길이+16, 인자를 넘기지 않으면 16 , 정수를 넘기면 그 크기의 버퍼를 생성한다. StringBuilder에 문자열을 추가 할경우 본래 버퍼 크기의 약 2배 이상으로 크기를 늘린다(2배+2). 추가 할 크기가 더 크다면 주어진 파라미터의 크기로 늘린다. 조금씩 자주 늘리는 것보다 한꺼번에 넉넉히 늘리는 정책을 사용한다. 그렇기 때문에 StringBuilder 클래스를 사용할 때는 문자열의 증가를 예측하여 미리 할당해두고 사용하는 것이 중요하다

StringBuilder의 크기를 늘리는 메소드 ensureCapacity(크기)

StringBuilder의 크기를 줄이는 메소드 trimToSize(크기)

 

3. StringTokenizer

java.util 패키지에 속하며 C의 strtok와 같은 기능을 한다. 생성자의 2번째 인자는 구분자, 3번째 인자는 복수 구분자 허용 여부로 옵션값이다. 토큰을 모두 추출하면 Exception을 발생하기 때문에 hasMoreTokens 로 남아있는 토큰을 확인해야한다.

   1:  StringTokenizer stok = new StringTokenizer("연필=4|라면=2", "=|", true);
   2:   
   3:  while (stok.hasMoreTokens()) {
   4:      String token = stok.nextToken();
   5:      if (token.equals("="))
   6:          System.out.print("\t");
   7:      else if (token.equals("|"))
   8:          System.out.print("\n");
   9:      else
  10:          System.out.print(token);
  11:                  
  12:  }