2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[자바 기초] 알고리즘 필수인 StringTokenizer의 개념

2023. 8. 9. 00:04ㆍJAVA 기초

 

[StringToknizer란?]

 

StringTokenizer란 알고리즘에서 필수 요소인 클래스입니다.

 

알고리즘을 처음 공부한다면 정말 많이 쓰는 클래스인데

 

예를들어 Scanner로 값들을 읽어들인다면 

Scanner 클래스가 아니더라도 BufferedReader 클래스라던가

 

입력값이 주어질 때

이 값들을 어떠한 기준으로 분리를 시켜 각각의 문자열을 토큰화 시키는 클래스를 말합니다.

 

이렇게만 듣는다면 이해가 되지 않습니다.

한번 자세하게 살펴보죠

 

StringTokenizer st = new StringTokenizer();

 

StringTokenizer의 선언은 이렇습니다.

StringTokenizer의 생성 방식은 총 3개가 있습니다.

 

 

1 . 단순히 문자열을 넣는다면 띄어쓰기 기준으로 문자열을 분리합니다.

예시를 봅시다.

 

 

str 문자열에  " 토 큰 테 스 트  "

란 문자열을 넣고 StringTokenzier에 넣었습니다.

그렇다면 결과는 어떻게 출력이 될까요?

 

 

 

 

 

이렇듯 토 만 출력되는 것을 확인 할 수 있습니다.

 

즉 StringTokenizer는 문자열만 삽입한다면 기본적으로 띄어쓰기를 제공합니다.

문자열만 삽입한다면 기본 구분자인 띄어쓰기 기준으로 토큰에 넣는 것 입니다.

저희가 str을 토 큰 테 스 트로 지정해놨기 때문에 StringTokenizer는 이렇게 들어 갈 것 입니다.

 

 

 

 

이 그림처럼 우리가 적은 문자열은 StringTokenizer의 기본 구분자인 띄어쓰기로 구분됩니다.

 

그리고 StringTokenizer의 메서드인 while문과 nextToken()을 사용한다면

토큰을 순차적으로 꺼낼 수 있게 됩니다.

 

 

[2 . 문자열 구분자]

 

 

1. 만약 문자열만 넣은게 아닌 구분자도 같이 넣는다면

기본 구분자인 띄어쓰기가 적용되는 것이 아닌 설정한 구분자로 문자열이 구분되어

토큰에 저장 됩니다.

예를 들어 보시죠

 

 

 

 

저희는 맨처음에는 아무런 구분자 없이 문자열만 삽입 했지만 이번에는 저희가 구분자를 지정 해주었습니다.

그렇게 된다면 저 구분자의 기준에 따라 문자열이 잘려 토큰에 들어가게 됩니다.

저의 경우 구분자를  :  로 했음으로 : 기준으로 문자열이 잘려 토큰에 들어가게 될 것 입니다.

 

 

 

아까와 마찬가지로 :를  기준으로 토큰에 들어가게 됩니다.

 

 

3 . 3번째의 경우는 문자열 , 분리자 , true , false로 지정 할 수 있습니다.

 

 

예를 들어 보시죠

 

 

 

아까와 똑같은 문자열을 가지고 있고 추가된 것은 3번째 인자에 true를 집어 넣었습니다.

 

즉 true를 집어 넣는다면 구분자도 토큰에 포함 시키겠다 라는 의미가 됩니다.

 

즉 그림으로 본다면

 

 

(발그림 ㅈㅅ)

 

이런식으로 들어가게 됩니다.

 

 

그렇다면 이렇게 st.nextToken()을 메서드를 사용해서 출력한다면 어떻게 될까요?

 

 

 

 

이렇게 처음 토큰을 꺼낸다면

맨 앞에 있는 토큰 ""가 출력이 될 것입니다.

그리고 또 토큰을 꺼낸다면 " : "가 나오게 될 것 입니다.

결과를 본다면

 

이렇게 , : 가 출력되는 것을 확인 할 수 있습니다.

 

다시 간단히 정리하자면 이렇습니다.

 

 

1. StringTokenizer의 생성자의 넣을 시

▶ 기본 구분인 띄어쓰기 기준으로 문자열을 분리

 

2. StringTokenizer를 문자열과 , 임의의 구분자로 생성자에 넣을 시

 

▶내가 설정한 구분자로 문자열을 잘라줌 

 

 

3.StringTokenizer를 문자열과 , 임이의 구분자 , boolean타입으로 생성자에 넣을 시

 

▶ 내가 설정한 구분자로 문자열을 잘라주되 true일 시 구분자도 토큰에 넣고

false일시 구분자는 토큰에 넣지 않음.

 

 

이렇게 StringTokenizer 생성과정에 대해 알아 봤습니다

 

그렇다면 어떠한 메서드가 있는지 확인 해보도록 합시다.

 

 

 

 

 

 

StringTokenizer st = new StringTokenizer(str);
 st.nextToken();

 

st.nextToken()은 토큰에 저장되어 있는 문자열을 순차적으로 가져오게 하는 메서드 입니다.

 

 

 

 

즉 st.nextToken()을 한번 사용 시  " " 를 가져오게 되고

st.nextToken()을 또 사용한다면 그 다음 문자열인 " " 을

그다음에는 테.. 이렇게 순차적으로 토큰에 저장되어 있는 문자열들을 하나씩 가져오게 됩니다.

 

 

StringTokenizer st = new StringTokenizer(str);
 st.hasMoreTokens()

 

st.hasMoreToken()의 경우

토큰이 있는동안은 계속해서 토큰을 가져오게 됩니다.

보통 독단적으로 메서드를 쓰는 경우는 없으며 while과 항상 같이 쓰는 메서드 입니다.

 

 

 

 

이렇게 while문과 함께 쓰는 메서드이며

토큰이 있을때 까지 반복하게 됩니다.

 

보통은 while(has.MoreToken()) 반복문과 st.nextToken() 함께 사용해

토큰안에 들어있는 문자열을 싹 다 가져오게 끔 하는 메서드 입니다.

 

 

이렇듯 토큰안에 저장되어 있는 모든 문자열을 가져오게 했습니다.

 

 

st.countTokens()

 

 

큰의 개수가 몇개인지 세는 메서드 입니다.

 

st.nextElement()

 

hanMoreElement()는 커서 바로 앞에 데이타가 들어있는지를 체크하는 것입니다.

 

현재 커서가 0이라면 첫번째칸을 가리키기 때문에 데이타가 하나라도 들어있다면 true를 리턴해 줍니다.