- /*
 - * @(#)StringCharacterIterator.java 1.17 01/11/29
 - *
 - * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
 - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 - */
 - /*
 - * @(#)StringCharacterIterator.java 1.17 01/11/29
 - *
 - * (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
 - * (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
 - *
 - * Portions copyright (c) 1996-1998 Sun Microsystems, Inc.
 - * 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.
 - *
 - * Permission to use, copy, modify, and distribute this software
 - * and its documentation for NON-COMMERCIAL purposes and without
 - * fee is hereby granted provided that this copyright notice
 - * appears in all copies. Please refer to the file "copyright.html"
 - * for further important copyright and licensing information.
 - *
 - * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
 - * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 - * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 - * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
 - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 - *
 - */
 - 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
 - */
 - 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();
 - }
 - }
 - }