관리 메뉴

오버플로

[Java] StringTokenizer 본문

Java

[Java] StringTokenizer

NACO 2021. 7. 30. 21:44

 StringTokenizer 

- java.util 패키지에서 제공 (import해야 사용 가능함)

- 문자열을 짧은 한 마디(token)로 구분할 때 사용

- StringTokenizer는 값을 가지지 않음

   > 값은 외부에 존재하고 그 제어권만 가지는 것

   > pointer를 사용함 (한 방향으로만 진행)

 

** 다양한 생성자

1) StringTokenizer(String str)

    - 입력되는 문자열의 공백(white space)로 토큰 생성

2) StringTokenizer(String str, String delim)

    - 입력되는 문자열을 기준문자열로 토큰 생성

    - 기준 문자열을 사용하여 토큰을 구분하는 생성자

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

    - 2)와 동일하나, 기준문자열을 토큰으로 취급할 것인지 결정하는 3번째 매개변수가 있음

 

** 자주 쓰이는 method

- countTokens() : 현재 남은 토큰의 개수

- hasMoreTokens() : 토큰 존재 여부 반환   // true or false 

- nextToken() : 토큰을 얻고 포인터를 다음 토큰으로 이동시킴

- 위 method 들을 활용한 while 문이 자주 사용됨 

  > 형식 : while ( 객체명.hasMoreTokens() ) {

                       ... 객체명.nextToken(); ... }


# 오늘의 코딩 #

- StringTokenizer를 활용해보자

 

package test;

import java.util.StringTokenizer;

public class UseStringTokenizer {

	/**
	 * 문자열 데이터를 기준 문자열로 구분한 후 배열에 넣고 반환하는 method<br>
	 * @return 구분된 문자열
	 */
	public String[] separateData() {
		String data = "짜장면,탕수육,짬뽕,볶음밥,팔보채,크림새우,깐풍기";
		StringTokenizer str = new StringTokenizer(data, ","); // ,로 문자열 나누기

		String[] dataArr = new String[str.countTokens()]; // token 수 만큼 배열 생성

		int i = 0;
		while (str.hasMoreTokens()) { // token을 배열에 할당하기 위한 while
			dataArr[i] = str.nextToken(); // 배열[0]부터 token값 넣기
			i++; // 배열 방을 바꿀 증감식
		} // end while

		return dataArr;
	}// separateData

	/**
	 * 제시된 이름 데이터에서 매개변수로 입력되는 "성"에 해당하는 이름이 몇 개인지 반환하는 method<br>
	 * 
	 * @param lastName 매개변수로 입력되는 성
	 * @return 같은 성에 해당하는 이름 수
	 */
	public int findLastName(String lastName) {
		int sameNum = 0; // 같은 성을 가진 이름의 개수를 저장할 변수

		String data = "김가가,김나나,김다다,박가가,박나나,박다다,이다다,삼다다,안다다,하가가";
		StringTokenizer str = new StringTokenizer(data, ",");

		String[] nameArr = new String[str.countTokens()]; // token 수 만큼 배열 생성

		int i = 0;
		while (str.hasMoreTokens()) { // token을 배열에 할당하는 while
			nameArr[i] = str.nextToken();
			if (nameArr[i].startsWith(lastName)) { // 같은 성을 가졌으면 sameNum의 수가 하나씩 더해짐
				sameNum++;
			} // end if
		} // end while

		return sameNum;
	}// findLastName

	public static void main(String[] args) {

		UseStringTokenizer st = UseStringTokenizer();
		
        // separateData() method 사용
		String[] dataArr = st.separateData(); // 다른 method에서 return한 배열을 할당
		for (String s : dataArr) { // 배열 출력
			System.out.printf("%-5s", s);
		} // end for
		
        // findLastName() method 사용
		String lastName = "박";
		System.out.println("\n" + st.findLastName(lastName));

	}// main

}// class

- 둘다 문자열을 token으로 자른 후 배열에 잘 저장만 한다면 사용하기에 무리는 없었다. 

- method 사용에 익숙해지면 좋을듯!

 

# 출력 결과 #

짜장면
탕수육
짬뽕
볶음밥
팔보채
크림새우
깐풍기

3

 

 

Comments