将字符串分隔成单词(指定多个分隔符)

将字符串分隔成单词(指定多个分隔符)

public class CommandTokenizer implements java.util.Enumeration
{
    private int currentPosition;
    private int newPosition;
    private int maxPosition;
    private String str;
    private String delimiters[] = {" ","\r","\n","\t"};
    private boolean retDelims;
    private boolean delimsChanged;
    private int currentDelims = -1;
    private char maxDelimChar;

    public CommandTokenizer(String str, String delim[], boolean returnDelims)
    {
       currentPosition = 0;
       newPosition = -1;
       delimsChanged = false;
       this.str = str;
       maxPosition = str.length();
       delimiters = delim;
       retDelims = returnDelims;
    }

    public CommandTokenizer(String str, String delim[])
    {
       this(str, delim, false);
    }

    public CommandTokenizer(String str)
    {
       currentPosition = 0;
       newPosition = -1;
       delimsChanged = false;
       this.str = str;
       maxPosition = str.length();
       retDelims = false;
    }

    private boolean matchDelims(int position,String s_delim)
    {
        if (s_delim == null)
            throw new NullPointerException();
        boolean matched=true;
        if (position + s_delim.length()>=maxPosition)
        {
           return false;
        }
        if (position+s_delim.length() > maxPosition) return false;
        for (int i=0;i     {
          if (str.charAt(position+i) != s_delim.charAt(i))
          {
             matched = false;
             break;
          }
        }
        return matched;
    }
    private boolean matchDelims(int position)
    {
        if (delimiters == null || delimiters.length==0)
            throw new NullPointerException();
        currentDelims = -1;
        boolean matched=false;
        for(int i=0;i {
            matched = matchDelims(position,delimiters[i]);
            if (matched)
            {
              currentDelims = i;
              break;
            }
        }
        return matched;
    }
   
    private int skipDelimiters(int startPos)
    {
        int position = startPos;
        while (!retDelims && position < maxPosition) {
           if (matchDelims(position))
           {
              position = position + delimiters[currentDelims].length();
              break;
           }
           position++;
        }
        return position ;
    }

 private int scanToken(int startPos)
 {
    int position = startPos;
    while (position < maxPosition)
    {
       if (matchDelims(position))
       {
         break;
       }
       position++;
    }
    if (retDelims && (startPos == position))
    {
       if (matchDelims(position))
          position = position + delimiters[currentDelims].length();
    }
    return position;
 }

    public boolean hasMoreTokens()
    {
        newPosition = skipDelimiters(currentPosition);
        return (newPosition < maxPosition);
    }

    public String nextToken()
    {
        currentPosition = (newPosition >= 0 && !delimsChanged) ? 
        newPosition : skipDelimiters(currentPosition);

        delimsChanged = false;
        newPosition = -1;

        if (currentPosition >= maxPosition)
             throw new java.util.NoSuchElementException();
        int start = currentPosition;
        currentPosition = scanToken(currentPosition);
        return str.substring(start, currentPosition);
    }

    public String nextToken(String delim[])
    {
         delimiters = delim;

         delimsChanged = true;

         return nextToken();
    }

    public boolean hasMoreElements()
    {
        return hasMoreTokens();
    }

    public Object nextElement()
    {
         return nextToken();
    }

    public int countTokens()
    {
         int count = 0;
         int currpos = currentPosition;
         while (currpos < maxPosition) {
            currpos = skipDelimiters(currpos);
            if (currpos >= maxPosition)
                break;
            currpos = scanToken(currpos);
          count++;
         }
         return count;
    }
}

posted on 2004-12-19 20:23  笨笨  阅读(1029)  评论(0编辑  收藏  举报

导航