JAVA

[JAVA] - 자바 문자열 분리 StringTokenizer 클래스

nam_ji 2024. 7. 18. 17:50

자바 문자열 분리 StringTokenizer 클래스

StringTokenizer 클래스란?

  • StringTokenizer 클래스는 문자열을 구분자를 이용하여 분리할 때 사용합니다.
  • 만일 BufferedReader 클래스의 메서드로 입력을 읽어들인다면 라인 단위로 읽어들일 수 밖에 없습니다.
  • 꼭 BufferedReader 클래스만이 아니더라도, 스페이스 기준, 콤마, 공백을 기준으로 문자열을 분리한다던가, 특정 문자에 따라 문자열을 분리하고 싶을 때 StringTokenizer를 사용합니다.
  • 간단하게
    String : 문자열
    Tokenizer : 토큰화
    이렇게 해석할 수 있습니다. 즉, 토큰은 분리된 문자열 조각으로, StringTokenizer 클래스는 하나의 문자열을 여러 개의 토큰으로 분리하는 클래스입니다. 

StringTokenizer 생성자 및 사용법

  • // 띄어쓰기 기준 문자열 분리
    StringTokenizer st = new StringTokenizer(문자열);
    
    // 구분자 기준 문자열 분리
    StringTokenizer st = new StringTokenizer(문자열, 구분자);
    
    // 구분자 기준 문자열 분리, 구분자 출력 여부
    StringTokenizer st = new StringTokenizer(문자열, 구분자, true / false);
    
    // 여러 개의 구분자 기준 문자열 분리, 구분자 출력 여부
    StringTokenizer st = new StringTokenizer(문자열, 구분자 1개 이상, true / false);

1. 띄어쓰기 기준 문자열 분리 (기본)

  • 생성자 파라미터에 구분자 없이 문자열을 넣어주면 띄어쓰기 기준으로 문자열이 분리됩니다.
import java.util.StringTokenizer;

public class StringTokenizerClass {
  public static void main(String[] args) {
    String s = "StringTokenizer, 작성법! 및, 사용법! 예시~";
    System.out.println("\n----------StringTokenizer 띄어쓰기 기준으로 문자열 분리----------");
    StringTokenizer1 stringTokenizer1 = new StringTokenizer1();
    stringTokenizer1.stringTokenizerEx(s);
  }
}

class StringTokenizer1 {
  public void stringTokenizerEx(String s) {
    System.out.println("구분 전 문자열 : " + s);
    StringTokenizer st = new StringTokenizer(s);

    System.out.println("\n띄어쓰기 기준 : ");
    while (st.hasMoreTokens()) {
      System.out.println(st.nextToken());
    }
  }
}

/*
출력

----------StringTokenizer 띄어쓰기 기준으로 문자열 분리----------
구분 전 문자열 : StringTokenizer, 작성법! 및, 사용법! 예시~

띄어쓰기 기준 : 
StringTokenizer,
작성법!
및,
사용법!
예시~
*/

2. 구분자 기준 문자열 분리

  • 생성자에 분리하고 싶은 문자열을 입력하고, 두 번째 인자로 어떤 문자로 구분지어 분리할 지 정해주면 됩니다.
import java.util.StringTokenizer;

public class StringTokenizerClass {
  public static void main(String[] args) {
    String s = "StringTokenizer, 작성법! 및, 사용법! 예시~";
    System.out.println("\n----------StringTokenizer 구분자 기준으로 문자열 분리----------");
    StringTokenizer2 stringTokenizer2 = new StringTokenizer2();
    stringTokenizer2.stringTokenizerEx(s);
  }
}

class StringTokenizer2 {
  public void stringTokenizerEx(String s) {
    System.out.println("구분 전 문자열 : " + s);
    StringTokenizer st = new StringTokenizer(s, "!");

    System.out.println("\n느낌표(!) 기준 : ");
    while (st.hasMoreTokens()) {
      System.out.println(st.nextToken());
    }
  }
}

/*
출력

----------StringTokenizer 구분자 기준으로 문자열 분리----------
구분 전 문자열 : StringTokenizer, 작성법! 및, 사용법! 예시~

느낌표(!) 기준 : 
StringTokenizer, 작성법
 및, 사용법
 예시~
*/

3. 구분자 기준 문자열 분리 및 구분자 출력 여부

  • 생성자 파라미터로 첫 번째는 분리하고자 하는 문자열, 두 번쨰 인자로 구분하고자 하는 문자, 세 번째 인자로는 true / false로 true를 입력하면 구분자도 같이 출력되고 false를 입력하면 구분자를 제외한 분리된 문자열만 출력하게 됩니다.
import java.util.StringTokenizer;

public class StringTokenizerClass {
  public static void main(String[] args) {
    String s = "StringTokenizer, 작성법! 및, 사용법! 예시~";
    System.out.println("\n----------StringTokenizer 구분자 기준으로 문자열 분리하고 구분자 출력 여부----------");
    StringTokenizer3 stringTokenizer3 = new StringTokenizer3();
    stringTokenizer3.stringTokenizerEx(s);
  }
}

class StringTokenizer3 {
  public void stringTokenizerEx(String s) {
    System.out.println("구분 전 문자열 : " + s);
    StringTokenizer stTrue = new StringTokenizer(s, "!", true);

    System.out.println("\n느낌표(!) 기준 구분자 출력 : ");
    while (stTrue.hasMoreTokens()) {
      System.out.println(stTrue.nextToken());
    }

    StringTokenizer stFalse = new StringTokenizer(s, "!", false);

    System.out.println("\n느낌표(!) 기준 문자열만 출력 : ");
    while (stFalse.hasMoreTokens()) {
      System.out.println(stFalse.nextToken());
    }
  }
}

/*
출력

----------StringTokenizer 구분자 기준으로 문자열 분리하고 구분자 출력 여부----------
구분 전 문자열 : StringTokenizer, 작성법! 및, 사용법! 예시~

느낌표(!) 기준 구분자 출력 : 
StringTokenizer, 작성법
!
 및, 사용법
!
 예시~

느낌표(!) 기준 문자열만 출력 : 
StringTokenizer, 작성법
 및, 사용법
 예시~
*/

4. 여러 개의 구분자 기준 문자열 분리

  • 지금까지와 같은 방법으로 이번에는 구분자에 여러가지 문자를 기준으로 문자열을 분리하고 싶다면 두 번째 인자로 구분하려는 문자들을 나열해서 입력하면 됩니다.
import java.util.StringTokenizer;

public class StringTokenizerClass {
  public static void main(String[] args) {
    String s = "StringTokenizer, 작성법! 및, 사용법! 예시~";
    System.out.println("\n----------StringTokenizer 여러 개의 구분자 기준으로 문자열 분리----------");
    StringTokenizer4 stringTokenizer4 = new StringTokenizer4();
    stringTokenizer4.stringTokenizerEx(s);
  }
}

class StringTokenizer4 {
  public void stringTokenizerEx(String s) {
    System.out.println("구분 전 문자열 : " + s);
    StringTokenizer st = new StringTokenizer(s, ",!");

    System.out.println("\n느낌표(!)와 쉼표(,) 기준 : ");
    while (st.hasMoreTokens()) {
      System.out.println(st.nextToken());
    }
  }
}

/*
출력

----------StringTokenizer 여러 개의 구분자 기준으로 문자열 분리----------
구분 전 문자열 : StringTokenizer, 작성법! 및, 사용법! 예시~

느낌표(!)와 쉼표(,) 기준 : 
StringTokenizer
 작성법
 및
 사용법
 예시~
*/

StringTokenizer 메서드

리턴 메서드 역할
boolean hasMoreTokens() 남아 있는 토큰이 있으면 true, 토큰이 없으면 false를 리턴합니다.
String nextToken() 객체에서 다음 토큰을 리턴합니다.
String nextToken(String delim) delim 기준으로 다음 토큰을 리턴합니다.
boolean hasMoreElement() hasMoreTokens와 동일하지만, 해당 메서드 보다 토큰으로 된 메서드를 주로 사용합니다.
Object nextElement() nextToken 메서드와 동일하지만, 문자열이 아닌 객체를 리턴합니다.
int countToken() 총 토큰의 개수를 리턴합니다.

StringTokenizer와 split 차이점

  • StringTokenizer는 java.util 패키지에 포함되어 있는 클래스이고, split은 String 클래스에 속해 있는 메서드 입니다.
  • StringTokenizer는 문자 또는 문자열로 구분한다면, split은 정규표현식으로 구분합니다.
  • StringTokenizer는 빈 문자열을 토큰으로 인식하지 않지만, split은 빈 문자열을 인식합니다.
  • StringTokenizer는 결과값이 문자열이라면 split은 결과 값이 문자열 배열입니다.
    따라서, StringTokenizer를 이용할 경우 전체 토큰을 보고싶다면 반복문을 이용해 하나하나 뽑아야 합니다.

전체코드

더보기
import java.util.StringTokenizer;

public class StringTokenizerClass {
  public static void main(String[] args) {
    String s = "StringTokenizer, 작성법! 및, 사용법! 예시~";
    System.out.println("\n----------StringTokenizer 띄어쓰기 기준으로 문자열 분리----------");
    StringTokenizer1 stringTokenizer1 = new StringTokenizer1();
    stringTokenizer1.stringTokenizerEx(s);

    System.out.println("\n----------StringTokenizer 구분자 기준으로 문자열 분리----------");
    StringTokenizer2 stringTokenizer2 = new StringTokenizer2();
    stringTokenizer2.stringTokenizerEx(s);

    System.out.println("\n----------StringTokenizer 구분자 기준으로 문자열 분리하고 구분자 출력 여부----------");
    StringTokenizer3 stringTokenizer3 = new StringTokenizer3();
    stringTokenizer3.stringTokenizerEx(s);

    System.out.println("\n----------StringTokenizer 여러 개의 구분자 기준으로 문자열 분리----------");
    StringTokenizer4 stringTokenizer4 = new StringTokenizer4();
    stringTokenizer4.stringTokenizerEx(s);
  }
}

class StringTokenizer1 {
  public void stringTokenizerEx(String s) {
    System.out.println("구분 전 문자열 : " + s);
    StringTokenizer st = new StringTokenizer(s);

    System.out.println("\n띄어쓰기 기준 : ");
    while (st.hasMoreTokens()) {
      System.out.println(st.nextToken());
    }
  }
}

class StringTokenizer2 {
  public void stringTokenizerEx(String s) {
    System.out.println("구분 전 문자열 : " + s);
    StringTokenizer st = new StringTokenizer(s, "!");

    System.out.println("\n느낌표(!) 기준 : ");
    while (st.hasMoreTokens()) {
      System.out.println(st.nextToken());
    }
  }
}

class StringTokenizer3 {
  public void stringTokenizerEx(String s) {
    System.out.println("구분 전 문자열 : " + s);
    StringTokenizer stTrue = new StringTokenizer(s, "!", true);

    System.out.println("\n느낌표(!) 기준 구분자 출력 : ");
    while (stTrue.hasMoreTokens()) {
      System.out.println(stTrue.nextToken());
    }

    StringTokenizer stFalse = new StringTokenizer(s, "!", false);

    System.out.println("\n느낌표(!) 기준 문자열만 출력 : ");
    while (stFalse.hasMoreTokens()) {
      System.out.println(stFalse.nextToken());
    }
  }
}

class StringTokenizer4 {
  public void stringTokenizerEx(String s) {
    System.out.println("구분 전 문자열 : " + s);
    StringTokenizer st = new StringTokenizer(s, ",!");

    System.out.println("\n느낌표(!)와 쉼표(,) 기준 : ");
    while (st.hasMoreTokens()) {
      System.out.println(st.nextToken());
    }
  }
}

/*
출력

----------StringTokenizer 띄어쓰기 기준으로 문자열 분리----------
구분 전 문자열 : StringTokenizer, 작성법! 및, 사용법! 예시~

띄어쓰기 기준 : 
StringTokenizer,
작성법!
및,
사용법!
예시~

----------StringTokenizer 구분자 기준으로 문자열 분리----------
구분 전 문자열 : StringTokenizer, 작성법! 및, 사용법! 예시~

느낌표(!) 기준 : 
StringTokenizer, 작성법
 및, 사용법
 예시~

----------StringTokenizer 구분자 기준으로 문자열 분리하고 구분자 출력 여부----------
구분 전 문자열 : StringTokenizer, 작성법! 및, 사용법! 예시~

느낌표(!) 기준 구분자 출력 : 
StringTokenizer, 작성법
!
 및, 사용법
!
 예시~

느낌표(!) 기준 문자열만 출력 : 
StringTokenizer, 작성법
 및, 사용법
 예시~

----------StringTokenizer 여러 개의 구분자 기준으로 문자열 분리----------
구분 전 문자열 : StringTokenizer, 작성법! 및, 사용법! 예시~

느낌표(!)와 쉼표(,) 기준 : 
StringTokenizer
 작성법
 및
 사용법
 예시~
*/