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

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

public class FieldTokenizer implements java.util.Enumeration
{
    private int currentPosition;
    private int newPosition;
    private int maxPosition;
    private String str;
    private String delimiters;
    private boolean retDelims;
    private boolean delimsChanged;

    private char maxDelimChar;

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

    public FieldTokenizer(String str, String delim)
    {
      this(str, delim, false);
    }

    public FieldTokenizer(String str)
    {
      this(str, " \t\n\r\f", false);
    }

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

    private int scanToken(int startPos) {
        int position = startPos;
        while (position < maxPosition)
       {
           if (matchDelims(position))
           {
            //position = position + delimiters.length();
            break;
           }
            position++;
       }
       if (retDelims && (startPos == position))
       {
           if (matchDelims(position))
            position = position + delimiters.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  笨笨  阅读(1030)  评论(0编辑  收藏  举报

导航