Java Reference
In-Depth Information
Its implementation requires two methods:
hasMoreElements
and
nextElement
.
Note that
nextElement
yields an
Object
; this method has been made as gener-
al as possible.
A class that enumerates Strings
We use interface
Enumeration
to write a class (see Fig. 12.7) that provides
an enumeration of the characters of a string. Class
StringEnumeration
needs
two fields: the string whose characters are to be enumerated and an integer that
indicates the next character to be listed. Integer
k
is initially
0
because
s[0]
is
the first character in the enumeration. Note that we describe in comments what
fields
k
and
s
are for.
Always
describe fields of using such a class invariant.
The constructor for
StringEnumeration
has one parameter, a string. This
parameter is stored in field
s
.
Method
hasMoreElements
is easy to write. Since
k
is the next element to
list, there are more elements if and only if
k
is less than the length of the
String
.
The specification of method
nextElement
requires us to check whether
there is indeed another element and to throw an exception (see Chap. 10) if there
is not. If there is another element,
k
can be incremented and the character can be
returned. Note that a value of type
char
cannot be returned because
nextEle-
ment
has to return an
Object
. Therefore, the
char
to be returned is wrapped in
an object of wrapper class
Character
.
Activity 12-4.2
shows how
easy it is to
change this
into a class to
enumerate
arrays.
/**
An enumeration of the characters in a
String
, as instances of class
Character
.
*/
public class
StringEnumeration
implements
Enumeration {
private
String s; // The string to be enumerated
private int
k= 0; //
s[k] is next char. to be enumerated (none if
k = s.length())
/**
Constructor: an instance to enumerate characters of
sp */
public
StringEnumeration(String sp)
{ s= sp; }
/** = "
there are more elements to enumerate
" */
public boolean
hasMoreElements()
{
return
k < s.length(); }
/** =
The next element to enumerate --it is of class
Character */
public
Object nextElement() {
if
(!hasMoreElements())
{
throw new
NoSuchElementException("no more characters"); }
k= k + 1;
return new
Character(s.charAt(k - 1));
}
}
Figure 12.7:
Class
StringEnumeration
Search WWH ::
Custom Search