/*
 * ｉｍｏｄｅ用文字列トークンクラス
 *
 * 作成日: 2006/05/08
 */
package jp.co.ntt.lms.imode.common;
import java.util.ArrayList;

/**
 * 文字列の区切り文字からトークンを切り出します。
 * java.util.StringTokenizerクラスのように空の値を省略することはありません。
 * また、区切り文字に文字列を指定することができます。
 * 
 *
 */
public class StringSeparator {
	///区切る前の文字列
	String string = null;
	///区切り文字の文字列
	String separator = null;
	///次のインデックス(Iterator用)
	int nextIndex = 0;
	///区切り文字で区切った配列
	ArrayList items = null;
	
	/**
	 * 文字列を区切り文字で区切る処理を開始します。
	 * @param string 区切る文字列
	 * @param separator 区切り文字
	 */
	public StringSeparator(String string, String separator){
		this.string = string;
		this.separator = separator;
		items = new ArrayList();
		separate();
	}
	
	/**
	 * 次の切り出し文字を取得します。
	 * @return 次の切り出し文字
	 */
	public String next(){
		if(nextIndex >= items.size()) return null;
		String ret = (String)items.get(nextIndex);
		nextIndex++;
		return ret;
	}
	
	/**
	 * 次の切り出し文字が存在する場合はtrueを返します。
	 * @return 次の切り出し文字が存在する場合はtrue
	 */
	public boolean hasNext(){
		if(nextIndex >= items.size()) return false;
		return true;
	}
	
	/**
	 * nextメソッドをクリアし、最初から切り出し文字を取得できるようにします。
	 *
	 */
	public void reset(){
		nextIndex = 0;
	}

	/**
	 * 文字列を区切り文字で区切り、ArrayListに格納します。
	 * 
	 */
	private void separate(){
		items.clear();

		int start = 0;
		for(int i=0; ;i++){
			int end = string.indexOf(separator, start);
			if(end < 0){
				String strItem = string.substring(start);
				items.add(strItem);
				break;
			}
			String strItem = string.substring(start, end);
			items.add(strItem);
			start = end + separator.length();
		}
	}
}
