ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 자바 기본 API - StringTokenizer, StringBuffer, StringBuilder Class
    CSE/Java 2016. 3. 29. 14:28

    자바 기본 API는 여러 절로 구성되어 있습니다.



    Intro

    Object Class

    Objects Class

    System Class

    Class Class

    String Class

    StringTokenizer, StringBuffer, StringBuilder Class

    Regular Expression & Pattern Class

    Arrays Class

    Wrapper Class

    Math, Random Class

    Date, Calendar Class

    Format Class

    java.time Package




    StringTokenizer Class

     문자열이 특정 구분자(delimiter)로 연결되어 있을 때, 구분자를 기준으로 하여 문자열을 분리하기 위해서 split() 메소드 또는 StringTokenizer 클래스를 이용할 수 있습니다. 


     split()은 정규 표현식(Regular Expression)으로 구분하고, StringTokenizer는 문자로 구분한다는 차이점이 있습니다.


     split() 메소드 

      String 클래스의 split() 메소드는 다음과 같이 호출되는데, 정규 표현식을 구분자로 해서 문자열을 분리한 후, 배열에 저장하고 리턴합니다.


    1
    String[] result = "문자열".split("정규표현식");
    cs


      다음은 기호로 구분된 이름을 분리하여 출력하는 예제입니다.



     * StringSplitExam.java


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package api;
     
     
    public class StringSplitExam {
     
        public static void main(String[] args) {
            String text = "Jack&Nick,Ciel-Tom,Jolie";
            
            String[] names = text.split("&|,|-");
            
            for (String name : names) {
                System.out.println(name);
            }
        }
     
    }
     
     
     
    cs








     StringTokenizer 클래스

      문자열이 한 종류의 구분자로 연결되어 있을 경우, StringTokenizer 클래스를 사용하면 손 쉽게 문자열(토큰: token)을 분리해 낼 수 있습니다. StringTokenizer 객체를 생성할 때 첫 번째 파라미터로 전체 문자열을 주고, 두 번째 파라미터로 구분자를 주면 됩니다. 만약 구분자가 생략되면 구분자는 기본적으로 공백(space)가 됩니다.


    1
    2
    StringTokenizer st = new StringTokenizer("문자열""구분자");
     
    cs



      StringTokenizer 객체가 생성되면 부분 문자열을 분리해 낼 수 있는데, 다음 메소드들을 이용해서 전체 토큰 수, 남아 있는 토큰 여부를 확인한 다음, 토큰을 읽으면 됩니다.






      다음은 두 가지 방법으로 토큰을 추출하는 방법을 보여줍니다.



     * StringTokenizerExam.java


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    package api;
     
     
    import java.util.StringTokenizer;
     
    public class StringTokenizerExam {
     
        public static void main(String[] args) {
            String text = "Jack/Jolie/Chan";
            
            // Way 1
            StringTokenizer st = new StringTokenizer(text, "/");
            int countTokens = st.countTokens();
            
            for (int i = 0; i < countTokens; i++) {
                String token = st.nextToken();
                System.out.println(token);
            }
            
            System.out.println();
            
            // Way 2
            st = new StringTokenizer(text, "/");
            
            while (st.hasMoreTokens()) {
                String token = st.nextToken();
                System.out.println(token);
            }
        }
     
    }
     
     
     
    cs






    StringBuffer, StringBuilder Class

     문자열을 저장하는 String은 내부의 문자열을 수정할 수 없습니다. 예를 들어 String의 replace() 메소드는 내부의 문자를 대치하는 것이 아니라, 대치된 새로운 문자열을 리턴합니다.


     문자열을 변경하는 작업이 많을 경우에는 String 클래스를 사용하는 것보다 java.lang 패키지의 StringBuffer 또는 StringBuilder 클래스를 사용하는 것이 좋습니다. 이 두 클래스는 내부 버퍼에 문자열을 저장해 두고, 그 안에서 추가, 수정, 삭제를 할 수 있도록 설계되어 있습니다. 


     StringBuffer와 StringBuilder 의 사용법은 동일한데 차이점은 StringBuffer는 멀티 스레드 환경에서 사용할 수 있도록 동기화가 적용되어 있어 스레드에 안정하지만, Builder는 단일 스레드 환경에서만 사용하도록 설계되어 있습니다. 


     StringBuilder 클래스는 몇 가지 생성자를 제공하고 있는데, 기본 생성자인 StringBuilder() 는 16개의 문자들을 저장할 수 있는 초기 버퍼를 만들고, StringBuilder(int capacity) 생성자는 capacity로 주어진 개수만큼 문자들을 저장할 수 있는 초기 버퍼를 만듭니다. StringBuilder는 버퍼가 부족할 경우 자동으로 버퍼 크기를 늘리기 때문에 초기 버퍼의 크기는 그다지 중요하지 않습니다.


     StringBuilder 객체가 생성되었다면 버퍼 내에서 문자 추가, 삽입, 삭제 등의 작업을 할 수 있는데 다음 메소드를 이용하면 됩니다.

     


     





     append()와 insert() 메소드는 매개 변수가 다양한 타입으로 오버로딩되어 있기 때문에 대부분의 값을 문자로 추가 또는 삽입 할 수 있습니다.


     * StringBuilderExam.java


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    package api;
     
     
    public class StringBuilderExam {
     
        public static void main(String[] args) {
            StringBuilder sb = new StringBuilder();
            
            sb.append("Java ");
            sb.append("Project Meeting");
            System.out.println(sb.toString());
            
            sb.insert(4"8");
            System.out.println(sb.toString());
     
            sb.setCharAt(4'9');
            System.out.println(sb.toString());
            
            sb.replace(1421"Design");
            System.out.println(sb.toString());
            
            sb.delete(45);
            System.out.println(sb.toString());
            
            int length = sb.length();
            System.out.println("총 문자수 : " + length);
        }
     
    }
     
     
     
    cs







    end

     


     * 이 포스트은 서적 '이것이 자바다' 를 참고하여 작성한 포스트입니다.


    댓글

Designed by Tistory.