ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java]STEP1 - 18) String 클래스, StringTokenizer, StringBuffer, StringBuilder
    개발 공부/Java 2020. 10. 16. 19:06

    본 게시글은 도서 "이것이 자바다" 동영상 강의를 듣고 기록하는 TIL(Today I Learned) 입니다.
    모든 저작권은 출판사 한빛미디어와 신용권님께 있음을 알립니다.👍

     

     

    이번 게시물에서는 String 클래스에 속한 여러가지 메소드에 대해서 알아보겠습니다.

    또한 문자열을 일정 기호 단위로 자르는 StringTokenizer 클래스와

    문자열을 자주 변경할 때 메모리를 효율적으로 사용할 수 있는 StringBuffer, StringBuilder 클래스에 대해 알아보겠습니다.

     

     

    1. String 클래스


    자바의 문자열은 java.lang 패키지의 String 클래스의 인스턴스로 관리된다.

    String 클래스는 문자열의 추출, 비교, 찾기, 분리, 변환 등과 같은 다양한 메소드를 가진다.

     

    리턴 타입 메소드명(매개 변수) 사용
    char charAt(int index) 해당 index의 문자 리턴
    boolean equals(Object obj) 두 문자열을 비교
    byte[] getBytes() byte[]로 리턴
    byte[] getBytes(Charset charset) 주어진 문자셋으로 인코딩한 byte[]로 리턴
    int indexOf(String str) 문자열 내에서 주어진 문자열의 위치를 리턴
    int length() 총 문자의 수를 리턴
    String replace(target, replacement) target부분을 replacement로 대치한 새로운 문자열 리턴
    String subString(int beginIndex) beginIndex 위치에서 끝까지 잘라낸 문자열 리턴
    String subString(int beginIndex, int endIndex) beginIndex 부터 endIndex 전까지 잘라낸 문자열 리턴
    String toLowerCase() 소문자로 변환한 문자열 리턴
    String toUpperCase() 대문자로 변환한 문자열 리턴
    String trim() 앞뒤 공백을 제거한 문자열 리턴
    String valueOf(int i)
    valueOf(double d)
    괄호 안 기본 타입을 문자열로 리턴
    String[] split("정규표현식") 정규 표현식을 구분자로 하여 문자열을 분리 한 후 배열로 리턴

     


     

    2. StringTokenizer 클래스


    문자열이 특정 구분자로 연결되어 있을 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해서는 split() 메소드를 이용하거나 StringTokenizer 클래스를 이용할 수 있다.

     

    split() 메소드는 정규 표현식으로 구분하고, StringTokenizer는 문자로 구분한다는 차이가 있다.

     

    문자열이 한 종류의 구분자로 연결되어 있을 경우, StringTokenizer를 이용하면 손쉽게 문자열을 분리해 낼 수 있다.

    String text = "Jason,Kyle,Adam";
    StringTokenizer st = new StringTokenizer(text, "/");

    이렇게 코드를 작성할 경우, StringTokenizer 객체에는 "Jason" , "Kyle", "Adam" 이렇게 세 개의 토큰이 존재하게 된다.

     

    StringTokenizer 객체에 있는 토큰을 이용할 때 사용할 수 있는 메소드는 다음과 같다.

    리턴타입 메소드 사용
    int countTokens() 꺼내지 않고 남아 있는 토큰의 수
    boolean hasMoreTokens() 남아 있는 토큰이 있는지 여부
    String nextToken() 토큰을 하나씩 꺼내옴

     

    nextToken() 메소드로 토큰을 하나씩 꺼내올때 마다, StringTokenizer 객체에는 해당 토큰이 없어진다.

    만약 StringTokenizer 객체에서 더 이상 가져올 토큰이 없는데 nextToken() 메소드를 사용하게 되면,

    NoSuchElementException이 발생하기 때문에, hasMoreTokens() 메소드를 통해서 토큰이 남아 있는지 여부를 먼저 검사해야 한다.

    String text = "Jason,Kyle,Adam";
    StringTokenizer st = new StringTokenizer(text, "/");

    while (st.hasMoreTokens()) {
        String token = st.nextToken();
        System.out.println(token);
    }

    while문에서 hasMoreTokens() 메소드를 통해 StringTokenizer 객체에 토큰이 남아 있는지 먼저 검사한다.
    남아 있다면, nextToken() 메소드를 통해 토큰을 가져온다.

     


     

    3. StringBuffer, StringBuilder 클래스


    문자열을 저장하는 String 클래스는 문자열을 수정할 수 없다.

    만약 String 클래스의 메소드를 이용해 문자열을 추가하거나 대치하거나 수정하였다면,

    그것은 문자열을 변경한 것이 아니라 변경한 것 처럼 보이는 새로운 문자열을 생성한 것이다.

     

    따라서 String 클래스의 메소드를 많이 이용하게 되면, String 객체의 수도 그만큼 많이 늘어나게 된다.

    이는 메모리를 낭비하여 프로그램의 성능을 느리게 하는 요인이 될 수 있다.

     

    문자열을 변경하는 작업이 많을 경우에는 java.lang 패키지의 StringBuffer 혹은 StringBuilder 클래스를 사용하는 것이 좋다.

    이들은 내부 버퍼(buffer: 데이터를 임시로 저장하는 메모리)에 문자열을 저장해두고 그 안에서 추가, 수정, 삭제 작업을 할 수 있도록 설계되어 있기 때문이다.

     

    StringBuffer와 StringBuilder는 사용 방법이 동일하나, StringBuffer는 멀티 스레드 환경에서, StringBuilder는 단일 스레드 환경에서 사용할 수 있다.

     

    아래는 StringBuffer와 StringBuilder에서 사용할 수 있는 메소드이다.

    메소드 사용
    append(...) 문자열 끝에 주어진 매개값을 추가
    insert(int offset, ...) 문자열 중간에 주어진 매개값을 추가
    delete(int start, int end) 문자열의 일부분을 삭제
    deleteCharAt(int index) 문자열에서 주어진 index의 문자를 삭제
    replace(int start, int end, String str) 문자열의 일부분을 다른 문자열로 대치
    reverse() 문자열의 순서를 뒤바꿈
    setCharAt(int index, char ch) 문자열에서 주어진 index의 문자를 다른 문자로 대치

     

     

    본 게시글은 여기서 마치겠습니다.

    읽어주셔서 감사하고, 혹시나 틀린 부분이나 보완해야할 부분이 있다면 댓글에 남겨주세요~!

    댓글

Designed by Tistory.