import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.StringTokenizer; import java.util.Vector; public class Play { private final static String DELIMITERS = " .?!()[]{}|/&\\,;:-\'\"\t\n\r"; private Vector text; public Play( String filename ) { text = new Vector(); try { BufferedReader inputFile = new BufferedReader( new FileReader(filename) ); String line = inputFile.readLine(); while ( line != null ) { text.addElement( line ); line = inputFile.readLine(); } } catch ( IOException e ) { System.err.println( "Error opening reader on file: " + filename ); } } public int startsWith( char targetChar ) { targetChar = Character.toLowerCase( targetChar ); int wordCount = 0; String buffer; StringTokenizer words; String word; for ( int i = 0; i < text.size(); i++ ) { buffer = text.elementAt(i).toLowerCase(); words = new StringTokenizer( buffer, DELIMITERS ); while( words.hasMoreElements() ) { word = (String) words.nextElement(); if ( word.charAt( 0 ) == targetChar ) wordCount++; } } return wordCount; } public int wordsOfLength( int targetLength ) { int wordCount = 0; String buffer; StringTokenizer words; String word; for ( int i = 0; i < text.size(); i++ ) { buffer = text.elementAt(i).toLowerCase(); words = new StringTokenizer( buffer, DELIMITERS ); while( words.hasMoreElements() ) { word = (String) words.nextElement(); if ( word.length() == targetLength ) wordCount++; } } return wordCount; } public int numberOfPalindromes() { int wordCount = 0; String buffer; StringTokenizer words; String word; for ( int i = 0; i < text.size(); i++ ) { buffer = text.elementAt(i).toLowerCase(); words = new StringTokenizer( buffer, DELIMITERS ); while( words.hasMoreElements() ) { word = (String) words.nextElement(); if ( isAPalindrome(word) ) wordCount++; } } return wordCount; } private boolean isAPalindrome( String s ) { if ( s == null) return false; int length = s.length(); if ( length < 2 ) return true; int half = length/2; for ( int i = 0; i < half; ++i ) if ( s.charAt(i) != s.charAt(length - 1 - i) ) return false; return true; } }