Recipe 3.7 Reversing a String by Word or by Character


Problem

You wish to reverse a string, a character, or a word at a time.

Solution

You can reverse a string by character easily, using a StringBuilder. There are several ways to reverse a string a word at a time. One natural way is to use a StringTokenizer and a stack. Stack is a class (defined in java.util; see Recipe 7.14) that implements an easy-to-use last-in, first-out (LIFO) stack of objects.

Discussion

To reverse the characters in a string, use the StringBuilder reverse( ) method:

// StringRevChar.java String sh = "FCGDAEB"; System.out.println(sh + " -> " + new StringBuffer(sh).reverse( ));

The letters in this example list the order of the sharps in the key signatures of Western music; in reverse, it lists the order of flats. Alternately, of course, you could reverse the characters yourself, using character-at-a-time mode (see Recipe 3.4).

A popular mnemonic , or memory aid, for the order of sharps and flats consists of one word for each sharp instead of just one letter, so we need to reverse this one word at a time. Example 3-5 adds each one to a Stack (see Recipe 7.14), then processes the whole lot in LIFO order, which reverses the order.

Example 3-5. StringReverse.java
String s = "Father Charles Goes Down And Ends Battle"; // Put it in the stack frontward Stack myStack = new Stack( ); StringTokenizer st = new StringTokenizer(s); while (st.hasMoreTokens( )) myStack.push(st.nextElement( )); // Print the stack backward System.out.print('"' + s + '"' + " backwards by word is:\n\t\""); while (!myStack.empty( )) {      System.out.print(myStack.pop( ));     System.out.print(' '); } System.out.println('"');



Java Cookbook
Java Cookbook, Second Edition
ISBN: 0596007019
EAN: 2147483647
Year: 2003
Pages: 409
Authors: Ian F Darwin

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net