여행을 개발하다

StringTokenizer, hasMoreTokens(), nextToken() 본문

BackEnd/Java

StringTokenizer, hasMoreTokens(), nextToken()

yhtragramming 2019. 5. 14. 12:45

안녕하세요!!

 

오늘 포스팅 할 내용은 "StringTokenizer"라는 클래스입니다.

 

우리는 컴퓨터에 영문자, 한글 등 여러 가지 언어와 형태로 문자를 입력합니다.

그리고 필요에 따라 쉼표(,), 마침표(.), equal(=)을 쓰기도 하구요.

 

그런데 쉼표, 마침표, equal은 의미 단위를 구분해주는 '구분자'로도 사용됩니다.

 

"StringTokenizer"라는 클래스는 이러한 구분자와 밀접한 연관이 있습니다.

 

지금부터 "StringTokenizer"이라는 클래스와

세부적으로 함께 쓰일 수 있는

"hasMoreTokens()", "nextToken()"

이라는 메소드에 대해서도 살펴보도록 하겠습니다.


들어가기 전에 토큰(Token)의 개념부터 정리하고 가요! 네이버 사전의 힘을 빌리겠습니다 : )


토큰(Token)

컴파일러는 번역할 경우 먼저 워드해석이라 불리는 기호열로서 입력된 소스 프로그램에서 구문 규칙에 기초하여 이름표, 연산자, 딜리미터 등의 식별을 하고, 내부데이터 의 열로 변환한다. 이 워드해석을 하여 식별되는 단위를 실러블(syllable)이라 하며, 그 내부데이터 표현을 토큰이라 한다.
출처 : 네이버 사전, 검색어 : 토큰 (정보통신용어사전, 2008. 1. 15., 일진사)

1. StringTokenizer

- 사용자가 지정하는 구분자를 경계로 하여 문자열을 나눠주는 Class.

- 만약 사용자가 구분자 지정을 생략하면 공백이나 탭이 기본 구분자로 사용된다.

- StringTokenizer 클래스 생성자의 3번째 인수로 구분자를 토큰에 포함할지의 여부를 지정할 수 있다.

- 3번째 인수 생략시(false) 구분자는 토큰에 포함되지 않지만, 3번째 인수에 true를 입력하면 구분자도 토큰으로 취급한다.

- StringTokenizer 클래스 생성자의 2번째 인수로 구분자를 여러개 지정할 수 있다.

* StringToneizerTest라는 클래스를 추가하고, main함수를 호출합니다.

* 문자열 변수 'str1'을 선언하고, tab과 space를 무작위로 포함하는 문자열 "사과 배 복숭아 밤 대추"를 초기 값으로 입력합니다.

* StringTokenizer Class의 새로운 객체 'st1'을 생성하고, 방금 선언했던 문자열 변수 'str1'을 인수로 입력합니다.

* 객체 st1에는 별도의 구분자 지정이 없기 때문에, space와 tab이 기본 구분자로 사용되었습니다.

 

이제 문자열을 구분할 준비가 끝났습니다.

 

그런데 문자열 구분은 str1이라는 변수에 저장된 문자열의 시작인 사과에서 끝인 대추까지 진행되어야 합니다. 그래서 while문을 사용하여, 문자열의 끝까지 구분할 수 있도록 반복문을 뺑뺑 돌리겠습니다.

 

이 때 함께 사용할 수 있는 메소드가 "hasMoreTokens()" "nextToken()"입니다.

2. hasMoreTokens()

- StringTokenizer 클래스 객체에서 다음에 읽어 들일 token이 있으면 true, 없으면 false를 return한다.

3. nextToken()

- StringTokenizer 클래스 객체에서 다음 토큰을 읽어 들인다.

 

* 객체 st1의 인수, 변수 str1 값 내에서 읽어 들일 token이 없을 때까지 무한 반복하는 while문을 사용하였습니다.

* 다음에 읽어 들일 token이 있으면 true, 없으면 false를 return하는 hasMoreTokens() 메소드를 사용하였으며, 이는 결국 while(true)와 같은 말이 되겠네요.

* while문을 반복하는 동안 실행될 nextToken() 메소드는 조건을 만족할 때까지 계속 다음 토큰을 읽어 들이는 역할을 하게 됩니다.

 

그 결과, "사과, 배, 복숭아, 밤, 대추"로 문자열이 나뉘어 출력되었습니다.

 

* 2개 이상의 구분자로 문자열 나누기

StringTokenizer 클래스에서 구분자를 2개 이상 설정하여 출력할 수도 있습니다.

 

","와 "."를 구분자로 입력하여, str3에 입력된 문자열을 나누어 보겠습니다.

위의 2개 이상의 구분자를 기준으로 정확하게 문자열이 나누어집니다.

 

* 구분자도 토큰으로 인식하기

이제는 구분자도 토큰으로 인식하여 출력해보겠습니다.

StringTokenizer의 3번째 인수가 true이면, 구분자도 토큰으로 인식합니다.

반대로, StringTokenizer의 3번째 인수가 false이거나 생략하면, 구분자는 구분자로 인식됩니다.

 

* "사과=100,배=200,수박=300,메론=500,망고=600,두리안=700""문자열, =, 가격"으로 나누어 출력하는 소스코드입니다.

 

" 첫 번째 소스 코드 : StringTokenizer st5 = new StringTokenizer(str5, "=,", true);

두 번째 소스 코드 : StringTokenizer st5 = new StringTokenizer(str5, "=,", false(생략 가능));

 

 

각각의 출력 결과는 다음과 같습니다.

 

 

차이점이 쉽게 보이시죠?ㅎㅎㅎ

 


지금까지

StringTokenizer 클래스와, hasMoreTokens(), nextToken() 메소드

에 대해 알아보았습니다.

 

그럼 다음 포스팅에서 뵙겠습니다 : )

Comments