1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.text; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * An implementation of {@link CharacterIterator} for strings. 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic final class StringCharacterIterator implements CharacterIterator { 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String string; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int start, end, offset; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code StringCharacterIterator} on the specified string. 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The begin and current indices are set to the beginning of the string, the 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * end index is set to the length of the string. 33f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source string to iterate over. 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public StringCharacterIterator(String value) { 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project string = value; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project start = offset = 0; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project end = string.length(); 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code StringCharacterIterator} on the specified string 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * with the current index set to the specified value. The begin index is set 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the beginning of the string, the end index is set to the length of the 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * string. 48f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source string to iterate over. 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param location 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the current index. 539b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @throws IllegalArgumentException 549b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * if {@code location} is negative or greater than the length 559b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * of the source string. 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public StringCharacterIterator(String value, int location) { 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project string = value; 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project start = 0; 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project end = string.length(); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (location < 0 || location > end) { 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project offset = location; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new {@code StringCharacterIterator} on the specified string 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * with the begin, end and current index set to the specified values. 70f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source string to iterate over. 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index of the first character to iterate. 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index one past the last character to iterate. 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param location 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the current index. 799b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @throws IllegalArgumentException 809b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * if {@code start < 0}, {@code start > end}, {@code location < 819b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * start}, {@code location > end} or if {@code end} is greater 829b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * than the length of {@code value}. 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 84fe711d61cafbb878d1d6a5e223fcd2201f2e829aElliott Hughes public StringCharacterIterator(String value, int start, int end, int location) { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project string = value; 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (start < 0 || end > string.length() || start > end 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || location < start || location > end) { 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.start = start; 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.end = end; 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project offset = location; 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a new {@code StringCharacterIterator} with the same source 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * string, begin, end, and current index as this iterator. 98f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a shallow copy of this iterator. 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see java.lang.Cloneable 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object clone() { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return super.clone(); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CloneNotSupportedException e) { 107fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes throw new AssertionError(e); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the character at the current index in the source string. 113f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the current character, or {@code DONE} if the current index is 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * past the end. 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public char current() { 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (offset == end) { 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return DONE; 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return string.charAt(offset); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the specified object with this {@code StringCharacterIterator} 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and indicates if they are equal. In order to be equal, {@code object} 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * must be an instance of {@code StringCharacterIterator} that iterates over 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the same sequence of characters with the same index. 129f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to compare with this object. 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if the specified object is equal to this 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code StringCharacterIterator}; {@code false} otherwise. 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #hashCode 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean equals(Object object) { 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(object instanceof StringCharacterIterator)) { 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project StringCharacterIterator it = (StringCharacterIterator) object; 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return string.equals(it.string) && start == it.start && end == it.end 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && offset == it.offset; 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the current position to the begin index and returns the character at 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new position in the source string. 149f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the character at the begin index or {@code DONE} if the begin 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * index is equal to the end index. 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public char first() { 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (start == end) { 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return DONE; 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project offset = start; 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return string.charAt(offset); 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the begin index in the source string. 163f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the index of the first character of the iteration. 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getBeginIndex() { 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return start; 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the end index in the source string. 172f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the index one past the last character of the iteration. 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getEndIndex() { 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return end; 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the current index in the source string. 181f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the current index. 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getIndex() { 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return offset; 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int hashCode() { 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return string.hashCode() + start + end + offset; 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the current position to the end index - 1 and returns the character 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * at the new position. 196f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the character before the end index or {@code DONE} if the begin 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * index is equal to the end index. 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2009b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson public char last() { 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (start == end) { 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return DONE; 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project offset = end - 1; 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return string.charAt(offset); 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2089b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson /** 2099b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * Increments the current index and returns the character at the new index. 2109b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * 2119b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @return the character at the next index, or {@code DONE} if the next 2129b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * index would be past the end. 2139b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson */ 2149b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson public char next() { 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (offset >= (end - 1)) { 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project offset = end; 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return DONE; 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return string.charAt(++offset); 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2229b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson /** 2239b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * Decrements the current index and returns the character at the new index. 224f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 2259b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @return the character at the previous index, or {@code DONE} if the 2269b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * previous index would be past the beginning. 2279b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson */ 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public char previous() { 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (offset == start) { 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return DONE; 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return string.charAt(--offset); 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the current index in the source string. 237f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param location 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the index the current position is set to. 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the character at the new index, or {@code DONE} if 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code location} is set to the end index. 2429b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * @throws IllegalArgumentException 2439b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * if {@code location} is smaller than the begin index or greater 2449b354e75f2418e54638e02d153216660b67d01b8Jesse Wilson * than the end index. 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public char setIndex(int location) { 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (location < start || location > end) { 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(); 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project offset = location; 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (offset == end) { 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return DONE; 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return string.charAt(offset); 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the source string to iterate over. The begin and end positions are 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set to the start and end of this string. 260f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new source string. 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setText(String value) { 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project string = value; 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project start = offset = 0; 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project end = value.length(); 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 270