프로그래밍 언어/Java

문자열을 어떻게 자를 수 있을까? - StringTokenizer 편 (JAVA)

제이온 (Jayon) 2020. 9. 17.

안녕하세요? 코딩 중독입니다.

이번 시간에는 Java에서 문자열을 자르는 방법에 대해서 알아보겠습니다.

 

우리는 프로그래밍을 하다 보면, 하나의 문자열에서 여러 가지 요소로 분리하고 싶은 생각이 들 때가 많습니다.

가령, "1 2 3 4 5" 라는 입력값이 주어지고, 공백을 기준으로 "1", "2, ... , "5"가 배열의 요소라면, 이들을 문자열에서 쪼개야 합니다.

 

위의 문제를 해결하기 위해서는 StringTokenizer 클래스를 사용하는 방법이 있습니다.

 

 

StringTokenizer 클래스

먼저, StringTokenizer를 선언하는 방법은 3가지가 있고, 각각의 방식은 아래 표에 나와있습니다.

 

 

<선언 방식>

 

(1) StringTokenizer(String str)

str을 초기 delim으로 분리합니다.

 

(2) StringTokenizer(String st, String delim)

특정 delim에 따라 str을 분리합니다.

 

(3) StringTokenizer(String str, String delim, boolean returnDelims)

str을 특정 delim에 따라 분리하되, delim도 토큰에 포함시킬 것인지 결정합니다.

 

 

여기서 delim은 문자열 내에서 자르는 기준을 의미합니다. 정확히 delim은 delimiter의 약자로 '구본 문자'를 뜻합니다. '구본 문자'는 일반 텍스트 또는 데이터 스트림에서 별도의 독립적 영역 사이의 경계를 지정하는 데 사용하는 하나의 문자 혹은 문자들의 배열로 이해하시면 되겠습니다.

 

생성자에서 인자로 delim을 넘겨주지 않을 경우, 초기 delim인 공백으로 판단합니다.

 

delim을 설정하여 넘겨줄 경우, 그 기준으로 문자열을 분리합니다.

이 때, 기준을 여러 개 정할 수 있는데, "%!."와 같이 여러 개의 기준을 한 번에 넣어 주면 됩니다. 단, 기준은 무조건 1자리이어야 한다는 점을 주의하시길 바랍니다.

 

그리고 위의 과정으로 만들어진 객체는 delim에 따라 나누어진 문자열의 토큰을 갖고 있습니다.

우리는 이러한 토큰을 꺼내와서 원하는 방식으로 문자열을 가공해야 합니다.

 

 

이를 하기 위하여 StringTokenizer 클래스의 주요 메소드를 알아보겠습니다.

 

 

<주요 메소드>

 

(1) countTokens() : int

현재 남아있는 토큰의 개수를 int 타입으로 반환합니다.

 

 

(2) nextToken() : String

다음의 토큰을 반환하는데, String 타입으로 반환합니다.

번외로, nextToken(String delim)이 있는데, 이것은 중간에 문자열을 자르는 기준을 인자로 들어온 새로운 delim으로 바꾸는 메소드입니다.

 

 

(3) nextElement() : Object

다음의 토큰을 반환하는데, Object 타입으로 반환합니다.

 

 

(4) hasMoreTokens(), hasMoreElements() : boolean

꺼내올 토큰이 존재하는지 확인하고 결과값을 boolean 타입으로 반환합니다.

 

 

사실상, 주로 nextToken()hasMoreToken()을 쓰는 편입니다.

딱히 Object 타입은 쓸 일이 없어서 String 타입의 토큰을 꺼내오고 이를 가공하는 일이 많습니다.

이제, 어떻게 사용해야 하는지 실제 코드를 보면서 알아보겠습니다.

 

 

<사용 방법>

 

 

 

 

첫 번째 케이스는 default delim을 사용한 경우입니다.

StringTokenizer 선언을 할 때, delim을 설정하지 않았으므로, 초기 delim인 공백으로 자동 설정됩니다.

출력 결과는 아래와 같습니다.

 

 

 

 

두 번째 케이스는 한 가지의 delim을 사용한 경우입니다.

기준은 '%'이고, 이에 따라서 문자열이 나뉘게 됩니다.

출력 결과는 아래와 같습니다.

 

 

 

 

세 번째 케이스는 여러 가지의 delim을 사용하고, delim 자체도 하나의 토큰으로 인식하게끔 선언한 경우입니다.

기준은  '%', '/'. '*'이고, 이에 따라서 문자열이 나뉘게 되는데, delim도 하나의 토큰으로 인식되어 토큰의 개수는 9개가 되는 것을 알 수 있습니다.

출력 결과는 아래와 같습니다.

 

 

 

 

마지막 케이스는 처음에 설정한 delim을 나중에 다른 delim으로 바꾸는 경우입니다.

처음에는 delim을 '%'으로 설정하였다가, 나중에 '&'로 바꾸었습니다.

'&'로 바꾸고 나면, 그에 따라 토큰이 재정렬된다는 것을 기억하시길 바랍니다.

출력 결과는 아래와 같습니다.

 

 

 

 

정리

지금까지 StringTokenizer 클래스를 통하여 문자열을 자르는 방법에 대해서 알아봤습니다.

하지만, 제가 이 글을 1편으로 나눈 이유가 있습니다. 바로, 문자열을 자르는 방법이 한 가지가 더 있기 때문이죠.

다음 시간에는 StringTokenizer 클래스가 아닌 String 클래스 내의 split() 메소드를 이용하여 문자열을 분리하는 방법에 대해서 설명하겠습니다.

 

 

지적 혹은 조언 환영합니다! 언제든지 댓글로 남겨주세요.

댓글

추천 글