⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mystringtoken.java

📁 招标投标网上系统
💻 JAVA
字号:
package com.neusoft.util;/* * @(#)StringTokenizer.java	1.26 01/12/03 * * Copyright 2002 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */import java.lang.*;import java.util.Enumeration;import java.util.NoSuchElementException;/** * The string tokenizer class allows an application to break a * string into tokens. The tokenization method is much simpler than * the one used by the <code>StreamTokenizer</code> class. The * <code>StringTokenizer</code> methods do not distinguish among * identifiers, numbers, and quoted strings, nor do they recognize * and skip comments. * <p> * The set of delimiters (the characters that separate tokens) may * be specified either at creation time or on a per-token basis. * <p> * An instance of <code>StringTokenizer</code> behaves in one of two * ways, depending on whether it was created with the * <code>returnDelims</code> flag having the value <code>true</code> * or <code>false</code>: * <ul> * <li>If the flag is <code>false</code>, delimiter characters serve to *     separate tokens. A token is a maximal sequence of consecutive *     characters that are not delimiters. * <li>If the flag is <code>true</code>, delimiter characters are themselves *     considered to be tokens. A token is thus either one delimiter *     character, or a maximal sequence of consecutive characters that are *     not delimiters. * </ul><p> * A <tt>StringTokenizer</tt> object internally maintains a current * position within the string to be tokenized. Some operations advance this * current position past the characters processed.<p> * A token is returned by taking a substring of the string that was used to * create the <tt>StringTokenizer</tt> object. * <p> * The following is one example of the use of the tokenizer. The code: * <blockquote><pre> *     StringTokenizer st = new StringTokenizer("this is a test"); *     while (st.hasMoreTokens()) { *         println(st.nextToken()); *     } * </pre></blockquote> * <p> * prints the following output: * <blockquote><pre> *     this *     is *     a *     test * </pre></blockquote> * * @author  unascribed * @version 1.26, 12/03/01 * @see     java.io.StreamTokenizer * @since   JDK1.0 */publicclass MyStringToken implements Enumeration {    private int currentPosition;    private int newPosition;    private int maxPosition;    private String str;    private String delimiters;    private boolean retDelims;    private boolean delimsChanged;    private int delimsIndex;    private boolean delimsCheck;    private int delimitersLeng;    /**     * maxDelimChar stores the value of the delimiter character with the     * highest value. It is used to optimize the detection of delimiter     * characters.     */    private char maxDelimChar;    /**     * Set maxDelimChar to the highest char in the delimiter set.     */    private void setMaxDelimChar() {        if (delimiters == null) {            maxDelimChar = 0;            return;        }        char m = 0;        for (int i = 0; i < delimiters.length(); i++) {            char c = delimiters.charAt(i);            if (m < c)                m = c;        }        maxDelimChar = m;    }    /**     * Constructs a string tokenizer for the specified string. All     * characters in the <code>delim</code> argument are the delimiters     * for separating tokens.     * <p>     * If the <code>returnDelims</code> flag is <code>true</code>, then     * the delimiter characters are also returned as tokens. Each     * delimiter is returned as a string of length one. If the flag is     * <code>false</code>, the delimiter characters are skipped and only     * serve as separators between tokens.     *     * @param   str            a string to be parsed.     * @param   delim          the delimiters.     * @param   returnDelims   flag indicating whether to return the delimiters     *                         as tokens.     */    public MyStringToken(String str, String delim, boolean returnDelims) {        currentPosition = -1;        newPosition = -1;        delimsChanged = false;        this.str = str;        maxPosition = str.length();        delimiters = delim;        retDelims = returnDelims;        delimsIndex=0;        delimitersLeng=delimiters.length();        setMaxDelimChar();    }    /**     * Constructs a string tokenizer for the specified string. The     * characters in the <code>delim</code> argument are the delimiters     * for separating tokens. Delimiter characters themselves will not     * be treated as tokens.     *     * @param   str     a string to be parsed.     * @param   delim   the delimiters.     */    public MyStringToken(String str, String delim) {        this(str, delim, false);    }    /**     * Constructs a string tokenizer for the specified string. The     * tokenizer uses the default delimiter set, which is     * <code>"&nbsp;&#92;t&#92;n&#92;r&#92;f"</code>: the space character,     * the tab character, the newline character, the carriage-return character,     * and the form-feed character. Delimiter characters themselves will     * not be treated as tokens.     *     * @param   str   a string to be parsed.     */    public MyStringToken(String str) {        this(str, " \t\n\r\f", false);    }    /**     * Skips delimiters starting from the specified position. If retDelims     * is false, returns the index of the first non-delimiter character at or     * after startPos. If retDelims is true, startPos is returned.     */    private int skipDelimiters(int startPos) {        if (delimiters == null)            throw new NullPointerException();        int position = startPos;        int curposition=position;        delimsIndex=0;        while (!retDelims && (curposition <= maxPosition)) {            if ((delimsIndex==delimitersLeng)||(curposition==maxPosition)){                if(delimsIndex==delimitersLeng){                   position = position + delimsIndex;                   delimsIndex=0;               }else{                   position++;               }              break;            }            char c = str.charAt(curposition);            if((c > maxDelimChar) || (delimiters.indexOf(c) < 0)){                  break;            }            if(delimiters.charAt(delimsIndex)==c){                  delimsIndex++;            }            curposition++;        }        return position;    }    /**     * Skips ahead from startPos and returns the index of the next delimiter     * character encountered, or maxPosition if no such delimiter is found.     */    private int scanToken(int startPos) {        int position = startPos;        delimsIndex=0;        while (position <=maxPosition) {            if(delimsIndex==delimitersLeng||position==maxPosition){              if(delimsIndex==delimitersLeng){                position = position - delimitersLeng;                delimsIndex = 0;              }              break;            }            char c = str.charAt(position);            if(delimiters.charAt(delimsIndex)==c){                  delimsIndex++;            }            position++;        }        return position;    }    /**     * Tests if there are more tokens available from this tokenizer's string.     * If this method returns <tt>true</tt>, then a subsequent call to     * <tt>nextToken</tt> with no argument will successfully return a token.     *     * @return  <code>true</code> if and only if there is at least one token     *          in the string after the current position; <code>false</code>     *          otherwise.     */    public boolean hasMoreTokens() {        /*         * Temporary store this position and use it in the following         * nextToken() method only if the delimiters have'nt been changed in         * that nextToken() invocation.         */          if(str.equals("")){              return false;          }          if(newPosition > maxPosition){              return false;          }          if(currentPosition!=-1){              newPosition = skipDelimiters(currentPosition);          }else{              newPosition=0;          }        return (newPosition <= maxPosition);    }    /**     * Returns the next token from this string tokenizer.     *     * @return     the next token from this string tokenizer.     * @exception  NoSuchElementException  if there are no more tokens in this     *               tokenizer's string.     */    public String nextToken() {        /*         * If next position already computed in hasMoreElements() and         * delimiters have changed between the computation and this invocation,         * then use the computed value.         */        if(newPosition==maxPosition){            newPosition++;            return "";        }        currentPosition = (newPosition >= 0 && !delimsChanged) ?            newPosition : skipDelimiters(currentPosition);        /* Reset these anyway */        delimsChanged = false;        newPosition = -1;        if (currentPosition >= maxPosition)            throw new NoSuchElementException();        int start = currentPosition;        currentPosition = scanToken(currentPosition);        if(currentPosition==start){            return "";        }else{          return str.substring(start, currentPosition);        }    }    /**     * Returns the next token in this string tokenizer's string. First,     * the set of characters considered to be delimiters by this     * <tt>StringTokenizer</tt> object is changed to be the characters in     * the string <tt>delim</tt>. Then the next token in the string     * after the current position is returned. The current position is     * advanced beyond the recognized token.  The new delimiter set     * remains the default after this call.     *     * @param      delim   the new delimiters.     * @return     the next token, after switching to the new delimiter set.     * @exception  NoSuchElementException  if there are no more tokens in this     *               tokenizer's string.     */    public String nextToken(String delim) {        delimiters = delim;        /* delimiter string specified, so set the appropriate flag. */        delimsChanged = true;        setMaxDelimChar();        return nextToken();    }    /**     * Returns the same value as the <code>hasMoreTokens</code>     * method. It exists so that this class can implement the     * <code>Enumeration</code> interface.     *     * @return  <code>true</code> if there are more tokens;     *          <code>false</code> otherwise.     * @see     java.util.Enumeration     * @see     java.util.StringTokenizer#hasMoreTokens()     */    public boolean hasMoreElements() {        return hasMoreTokens();    }    /**     * Returns the same value as the <code>nextToken</code> method,     * except that its declared return value is <code>Object</code> rather than     * <code>String</code>. It exists so that this class can implement the     * <code>Enumeration</code> interface.     *     * @return     the next token in the string.     * @exception  NoSuchElementException  if there are no more tokens in this     *               tokenizer's string.     * @see        java.util.Enumeration     * @see        java.util.StringTokenizer#nextToken()     */    public Object nextElement() {        return nextToken();    }    /**     * Calculates the number of times that this tokenizer's     * <code>nextToken</code> method can be called before it generates an     * exception. The current position is not advanced.     *     * @return  the number of tokens remaining in the string using the current     *          delimiter set.     * @see     java.util.StringTokenizer#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;    }    public static void main(String[] args){          MyStringToken mst=new MyStringToken("aa=-aa","=-");          while(mst.hasMoreElements()){            System.out.println("**"+mst.nextToken()+"**");            //mst.nextToken();          }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -