Java Reference
In-Depth Information
Using StringEnumeration in a procedure to print characters of a String
Now that we have class
StringEnumeration
, we write a procedure that
uses it to print the characters of a
String
:
/**
Print the chars of
s */
public static void
print(String s) {
StringEnumeration e=
new
StringEnumeration(s);
while
(e.hasMoreElements())
{ System.out.println(e.nextElement()); }
}
First, the procedure body creates an instance of class
StringEnumeration
for
s
and stores it in local variable
e
. Next, a loop processes the characters of
s
,
using
e
to enumerate the characters, one by one. The loop terminates when
e
indicates that there are no more elements. Each loop iteration retrieves the next
element of
e
and prints it. This loop is so simple that we omit the invariant.
Pay attention to the way
Enumeration e
is used. Function
nextElement
should be called only if it is known that there is another element to process, and
the only way to know that is to call
hasMoreElements
. Function
hasMoreEle-
ments
may actually be called several times in a row, but each call of function
nextElement
must be preceded by a call to
hasMoreElements
because that is
the only way to determine whether there is another element to enumerate.
Casting the result of function nextElement
By definition, the result of function
nextElement
has type
Object
. In
method
print
above, we could use the fact that
Object
has function
toString
defined on it in order to print each character in turn. However, it may be neces-
sary to cast the object back to
Character
in order to suitably process it. To illus-
trate this, in Fig. 12.8 we write a method that constructs a
String
that consists
of every other character of its parameter.
Get a class
with the
method of Fig.
12.9 from les-
son page 12.4.
/** =
the string consisting of the first, third, fifth, …, chars of
s */
public static
String getAlternateCharacters(String s) {
String res= "";
StringEnumeration e=
new
StringEnumeration(s);
// inv: res
contains the alternate chars of the part of
s
that has been enumerated, and
//
an even number of characters has been enumerated
while
(e.hasMoreElements()) {
res= res + (Character) (e.nextElement());
if
(e.hasMoreElements()) {
Object throwAway= e.nextElement();
}
return
res;
}
Program 12.8:
Function
getAlternateCharacters
Search WWH ::
Custom Search