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
작성법
및
사용법
예시~
*/