stringcharacteriterator.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 283 行

JAVA
283
字号
/* * * @(#)StringCharacterIterator.java	1.24 06/10/03 * * Portions Copyright  2000-2008 Sun Microsystems, Inc. All Rights * Reserved.  Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). *  * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA *  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. *//* * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved * * The original version of this source code and documentation * is copyrighted and owned by Taligent, Inc., a wholly-owned * subsidiary of IBM. These materials are provided under terms * of a License Agreement between Taligent and Sun. This technology * is protected by multiple US and International patents. * * This notice and attribution to Taligent may not be removed. * Taligent is a registered trademark of Taligent, Inc. * */package java.text;/** * <code>StringCharacterIterator</code> implements the * <code>CharacterIterater</code> protocol for a <code>String</code>. * The <code>StringCharacterIterator</code> class iterates over the * entire <code>String</code>. * * @see CharacterIterator */public final class StringCharacterIterator implements CharacterIterator{    private String text;    private int begin;    private int end;    // invariant: begin <= pos <= end    private int pos;    /**     * Constructs an iterator with an initial index of 0.     */    public StringCharacterIterator(String text)    {        this(text, 0);    }    /**     * Constructs an iterator with the specified initial index.     *     * @param  text   The String to be iterated over     * @param  pos    Initial iterator position     */    public StringCharacterIterator(String text, int pos)    {    this(text, 0, text.length(), pos);    }    /**     * Constructs an iterator over the given range of the given string, with the     * index set at the specified position.     *     * @param  text   The String to be iterated over     * @param  begin  Index of the first character     * @param  end    Index of the character following the last character     * @param  pos    Initial iterator position     */    public StringCharacterIterator(String text, int begin, int end, int pos) {        if (text == null)            throw new NullPointerException();        this.text = text;        if (begin < 0 || begin > end || end > text.length())            throw new IllegalArgumentException("Invalid substring range");        if (pos < begin || pos > end)            throw new IllegalArgumentException("Invalid position");        this.begin = begin;        this.end = end;        this.pos = pos;    }    /**     * Reset this iterator to point to a new string.  This package-visible     * method is used by other java.text classes that want to avoid allocating     * new StringCharacterIterator objects every time their setText method     * is called.     *     * @param  text   The String to be iterated over     * @since 1.2     */    public void setText(String text) {        if (text == null)            throw new NullPointerException();        this.text = text;        this.begin = 0;        this.end = text.length();        this.pos = 0;    }    /**     * Implements CharacterIterator.first() for String.     * @see CharacterIterator#first     */    public char first()    {        pos = begin;        return current();    }    /**     * Implements CharacterIterator.last() for String.     * @see CharacterIterator#last     */    public char last()    {        if (end != begin) {            pos = end - 1;        } else {            pos = end;        }        return current();     }    /**     * Implements CharacterIterator.setIndex() for String.     * @see CharacterIterator#setIndex     */    public char setIndex(int p)    {    if (p < begin || p > end)            throw new IllegalArgumentException("Invalid index");        pos = p;        return current();    }    /**     * Implements CharacterIterator.current() for String.     * @see CharacterIterator#current     */    public char current()    {        if (pos >= begin && pos < end) {            return text.charAt(pos);        }        else {            return DONE;        }    }    /**     * Implements CharacterIterator.next() for String.     * @see CharacterIterator#next     */    public char next()    {        if (pos < end - 1) {            pos++;            return text.charAt(pos);        }        else {            pos = end;            return DONE;        }    }    /**     * Implements CharacterIterator.previous() for String.     * @see CharacterIterator#previous     */    public char previous()    {        if (pos > begin) {            pos--;            return text.charAt(pos);        }        else {            return DONE;        }    }    /**     * Implements CharacterIterator.getBeginIndex() for String.     * @see CharacterIterator#getBeginIndex     */    public int getBeginIndex()    {        return begin;    }    /**     * Implements CharacterIterator.getEndIndex() for String.     * @see CharacterIterator#getEndIndex     */    public int getEndIndex()    {        return end;    }    /**     * Implements CharacterIterator.getIndex() for String.     * @see CharacterIterator#getIndex     */    public int getIndex()    {        return pos;    }    /**     * Compares the equality of two StringCharacterIterator objects.     * @param obj the StringCharacterIterator object to be compared with.     * @return true if the given obj is the same as this     * StringCharacterIterator object; false otherwise.     */    public boolean equals(Object obj)    {        if (this == obj)            return true;        if (!(obj instanceof StringCharacterIterator))            return false;        StringCharacterIterator that = (StringCharacterIterator) obj;        if (hashCode() != that.hashCode())            return false;        if (!text.equals(that.text))            return false;        if (pos != that.pos || begin != that.begin || end != that.end)            return false;        return true;    }    /**     * Computes a hashcode for this iterator.     * @return A hash code     */    public int hashCode()    {        return text.hashCode() ^ pos ^ begin ^ end;    }    /**     * Creates a copy of this iterator.     * @return A copy of this     */    public Object clone()    {        try {            StringCharacterIterator other            = (StringCharacterIterator) super.clone();            return other;        }        catch (CloneNotSupportedException e) {            throw new InternalError();        }    }}

⌨️ 快捷键说明

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