CS99

Fundamental Programming Concepts
Summer 2001

 

Lab 9: Bonus (Pig Latin Translator)


PigLatinTranslator.java
 
import java.util.StringTokenizer;
/* You must include the previous line if you use the StringTokenizer class! */

/**
*    class PigLatinTranslator represents a translation system from English to Pig Latin.
*/
class PigLatinTranslator {

   /**
   *    Translates a sentence of words into Pig Latin
   */
   public static String translate( String sentence ) {
       sentence = sentence.toLowerCase();
       StringTokenizer tokenizer = new StringTokenizer( sentence );
       String ans = "";
       while ( tokenizer.hasMoreTokens() ) {
           ans += translateWord( tokenizer.nextToken() ) + " ";
       }
       return ans;
   }

   /**
   *    Translates one word into Pig Latin.  If the word begins with a vowel, the suffix "yay"
   *    is appended to the word.  Otherwise the first letter or two are moved to the end of the
   *    word and "ay" is appended.
   */
   private static String translateWord( String word ) {
       String trans = "";
       if ( beginsWithVowel ( word ) )
           trans = word + "y";
       else if ( beginsWithPrefix( word ) )
           trans = word.substring(2) + word.substring(0, 2);
       else
           trans = word.substring(1) + word.charAt( 0 );
       
       return trans + "ay";
   }

   /**
   *    Determines if the specified word begins with a vowel.
   */
   private static boolean beginsWithVowel( String word ) {
       return word.charAt( 0 ) == 'a' || word.charAt( 0 ) == 'e' || word.charAt( 0 ) == 'i' ||
           word.charAt( 0 ) == 'o' || word.charAt( 0 ) == 'u';
   }

   /**
   *    Determines if the specified word begins with a particular two-character prefix.
   */
   private static boolean beginsWithPrefix( String str ) {
       str = str.toLowerCase();
       return str.startsWith("bl") || str.startsWith("pl") || str.startsWith("br") || 
            str.startsWith("p") || str.startsWith("ch") || str.startsWith("sh") ||
            str.startsWith("cl") || str.startsWith("sl")|| str.startsWith("cr") || 
            str.startsWith("sp") ||str.startsWith("dr") || str.startsWith("sr") || 
            str.startsWith("fl") || str.startsWith("st") ||str.startsWith("fr") || 
            str.startsWith("th")|| str.startsWith("gl") || str.startsWith("tr") ||
            str.startsWith("gr") || str.startsWith("wh")|| str.startsWith("kl") || 
            str.startsWith("wr") ||str.startsWith("ph");

   }
   
}


PigLatin.java

class PigLatin {

   public static void main( String[] args ) {
       TokenReader in = new TokenReader( System.in );
       String cont = "y";
       String sentence = "";
       do {
           System.out.println("Enter a sentence (no punctuation): ");
           sentence = in.readLine();
           System.out.println("\nThat sentence in Pig Latin is:");
           System.out.println(PigLatinTranslator.translate( sentence ) +"\n");
           System.out.print("Translate another sentence (y/n)? " );
           cont = in.readString();
           System.out.println("\n");
       } while( cont.equalsIgnoreCase("y") );

   }

}