Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/java/text/StringCharacterIterator.java
38829 views
1
/*
2
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
/*
27
* (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
28
* (C) Copyright IBM Corp. 1996 - 1998 - All Rights Reserved
29
*
30
* The original version of this source code and documentation
31
* is copyrighted and owned by Taligent, Inc., a wholly-owned
32
* subsidiary of IBM. These materials are provided under terms
33
* of a License Agreement between Taligent and Sun. This technology
34
* is protected by multiple US and International patents.
35
*
36
* This notice and attribution to Taligent may not be removed.
37
* Taligent is a registered trademark of Taligent, Inc.
38
*
39
*/
40
41
package java.text;
42
43
/**
44
* <code>StringCharacterIterator</code> implements the
45
* <code>CharacterIterator</code> protocol for a <code>String</code>.
46
* The <code>StringCharacterIterator</code> class iterates over the
47
* entire <code>String</code>.
48
*
49
* @see CharacterIterator
50
*/
51
52
public final class StringCharacterIterator implements CharacterIterator
53
{
54
private String text;
55
private int begin;
56
private int end;
57
// invariant: begin <= pos <= end
58
private int pos;
59
60
/**
61
* Constructs an iterator with an initial index of 0.
62
*
63
* @param text the {@code String} to be iterated over
64
*/
65
public StringCharacterIterator(String text)
66
{
67
this(text, 0);
68
}
69
70
/**
71
* Constructs an iterator with the specified initial index.
72
*
73
* @param text The String to be iterated over
74
* @param pos Initial iterator position
75
*/
76
public StringCharacterIterator(String text, int pos)
77
{
78
this(text, 0, text.length(), pos);
79
}
80
81
/**
82
* Constructs an iterator over the given range of the given string, with the
83
* index set at the specified position.
84
*
85
* @param text The String to be iterated over
86
* @param begin Index of the first character
87
* @param end Index of the character following the last character
88
* @param pos Initial iterator position
89
*/
90
public StringCharacterIterator(String text, int begin, int end, int pos) {
91
if (text == null)
92
throw new NullPointerException();
93
this.text = text;
94
95
if (begin < 0 || begin > end || end > text.length())
96
throw new IllegalArgumentException("Invalid substring range");
97
98
if (pos < begin || pos > end)
99
throw new IllegalArgumentException("Invalid position");
100
101
this.begin = begin;
102
this.end = end;
103
this.pos = pos;
104
}
105
106
/**
107
* Reset this iterator to point to a new string. This package-visible
108
* method is used by other java.text classes that want to avoid allocating
109
* new StringCharacterIterator objects every time their setText method
110
* is called.
111
*
112
* @param text The String to be iterated over
113
* @since 1.2
114
*/
115
public void setText(String text) {
116
if (text == null)
117
throw new NullPointerException();
118
this.text = text;
119
this.begin = 0;
120
this.end = text.length();
121
this.pos = 0;
122
}
123
124
/**
125
* Implements CharacterIterator.first() for String.
126
* @see CharacterIterator#first
127
*/
128
public char first()
129
{
130
pos = begin;
131
return current();
132
}
133
134
/**
135
* Implements CharacterIterator.last() for String.
136
* @see CharacterIterator#last
137
*/
138
public char last()
139
{
140
if (end != begin) {
141
pos = end - 1;
142
} else {
143
pos = end;
144
}
145
return current();
146
}
147
148
/**
149
* Implements CharacterIterator.setIndex() for String.
150
* @see CharacterIterator#setIndex
151
*/
152
public char setIndex(int p)
153
{
154
if (p < begin || p > end)
155
throw new IllegalArgumentException("Invalid index");
156
pos = p;
157
return current();
158
}
159
160
/**
161
* Implements CharacterIterator.current() for String.
162
* @see CharacterIterator#current
163
*/
164
public char current()
165
{
166
if (pos >= begin && pos < end) {
167
return text.charAt(pos);
168
}
169
else {
170
return DONE;
171
}
172
}
173
174
/**
175
* Implements CharacterIterator.next() for String.
176
* @see CharacterIterator#next
177
*/
178
public char next()
179
{
180
if (pos < end - 1) {
181
pos++;
182
return text.charAt(pos);
183
}
184
else {
185
pos = end;
186
return DONE;
187
}
188
}
189
190
/**
191
* Implements CharacterIterator.previous() for String.
192
* @see CharacterIterator#previous
193
*/
194
public char previous()
195
{
196
if (pos > begin) {
197
pos--;
198
return text.charAt(pos);
199
}
200
else {
201
return DONE;
202
}
203
}
204
205
/**
206
* Implements CharacterIterator.getBeginIndex() for String.
207
* @see CharacterIterator#getBeginIndex
208
*/
209
public int getBeginIndex()
210
{
211
return begin;
212
}
213
214
/**
215
* Implements CharacterIterator.getEndIndex() for String.
216
* @see CharacterIterator#getEndIndex
217
*/
218
public int getEndIndex()
219
{
220
return end;
221
}
222
223
/**
224
* Implements CharacterIterator.getIndex() for String.
225
* @see CharacterIterator#getIndex
226
*/
227
public int getIndex()
228
{
229
return pos;
230
}
231
232
/**
233
* Compares the equality of two StringCharacterIterator objects.
234
* @param obj the StringCharacterIterator object to be compared with.
235
* @return true if the given obj is the same as this
236
* StringCharacterIterator object; false otherwise.
237
*/
238
public boolean equals(Object obj)
239
{
240
if (this == obj)
241
return true;
242
if (!(obj instanceof StringCharacterIterator))
243
return false;
244
245
StringCharacterIterator that = (StringCharacterIterator) obj;
246
247
if (hashCode() != that.hashCode())
248
return false;
249
if (!text.equals(that.text))
250
return false;
251
if (pos != that.pos || begin != that.begin || end != that.end)
252
return false;
253
return true;
254
}
255
256
/**
257
* Computes a hashcode for this iterator.
258
* @return A hash code
259
*/
260
public int hashCode()
261
{
262
return text.hashCode() ^ pos ^ begin ^ end;
263
}
264
265
/**
266
* Creates a copy of this iterator.
267
* @return A copy of this
268
*/
269
public Object clone()
270
{
271
try {
272
StringCharacterIterator other
273
= (StringCharacterIterator) super.clone();
274
return other;
275
}
276
catch (CloneNotSupportedException e) {
277
throw new InternalError(e);
278
}
279
}
280
281
}
282
283