N스크린하이브리드앱과정/JAVA

[3주][4일][3~4th] StringBuffer 클래스, StringTokenizer

광천스러움 2013. 8. 1. 18:07

*개념 

String 클래스는 불변 객체라고 하며, 내용을 변경할 수 없다.

또한 같은 문자열이 나오게 되더라도, 따로 공간을 생성해줘야 한다.

 

StringBuffer 클래스도 마찬가지다.

하지만, 이 클래스에서 제공하는 메서드들의 기능을 사용할 때에는 메모리 공간을 매번 할당하지 않고 같은 메모리 공간에서 인스턴스를 재사용한다.

 

 

*메서드의 종류

1. capacity() : 사전 할당된 문자 배열(버퍼) 크기 반환

  - 기본 버퍼 크기 : 16

StringBuffer sb = new StringBuffer();

System.out.println("스트링 버퍼 크기: "+sb.capacity()); 

 

2. append() : 문자열 추가

sb.append("Hello ");
sb.append("Java!");
System.out.println("sb: "+sb);

--> 문자열이 하나씩 추가된다!

 

3. reverse() : 문자열 뒤집기

sb.reverse();
System.out.println("reverse() 후: "+sb);
sb.reverse();
 

 

4.   insert() : 정해진 위치에 문자열 추가

 sb.insert(10," World");
 System.out.println(sb);

  

5. delete() : start~(end-1)까지의 문자

  sb.delete(0, 6);
  System.out.println(sb);

  

6. charAt() : 해당 인덱스의 문자 반환

  System.out.println("charAt(): "+sb.charAt(5));

  

7. length() : 문자열 길이 반환(문자 수)

  System.out.println("데이터 길이(): "+sb.length());

 

8. indexOf() : 해당 문자열 위치 반환

    LastindexOf() : 해당 문자열 마지막 위치를 반환

 

 

* StringBuffer 클래스 실습

 - 45번 : 원래 초기값은 16인데, new를 쓸 때 생성자 값에 8을 넣어주었기 때문에 버퍼크기는 8로

    초기화된다.

 - 52~61번 : 처음 문자를 받을 때는 버퍼크기가 8을 초과하지 않지만, 그 이상이 될 경우 컴퓨터가 

                   알아서 크기를 늘려준다.

 - 67~74번 : StringBuilder 클래스는 StringBuffer 클래스에 비해 단일 Thread에서는 사용하기 좋으나,

                   그 이상으로는 좀 더 자세하게 따져보기 때문에 시간이 많이 걸린다.

 

결과

 

 

 

* StringTokenizer 클래스 실습

 - 개념 : 문자열 사이의 특수문자나 공백을 인식하여. 문자열을 뽑아내는 것.

 - 매개변수 : StringTokenizer("문자열","골라낼 특수문자 또는 공백")

 

메서드

1. hasMoreTokens() : 파싱된 다음 문자열이 있는지 확인

2. nextToken() : 파싱한 문자열을 차례대로 넘겨줌(+출력문)

 

결과

 

 

* StringBuffer 클래스 -> 인스턴스의 주소값 비교

- 8~11번 : 일반적으로 sb와 sb2 객체를 비교하면 그 결과는 같지 않다. 객체 자체가 클래스의 주소

                 값을 가리키기 때문이다.

 - 13~19번 : 그렇다면 equals() 메서드를 사용해 비교해보자. 근데 결과가 false다? 왜일까?

                   String 클래스에서의 equals()메서드는 객체들의 주소가 가리키는 값을 비교하도록 오버

                   라이딩이 설정되어 있지만, StringBuffer 클래스는 그렇지 않기 때문이다.

 - 21~24번 : 따라서 equals() 메서드가 제 기능을 하도록 StringBuffer 클래스의 toString() 메서드를

                   String s 인스턴스로 변환해준다. 이 과정을 통해 두 객체의 값이 같아진다.

 

결과