import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.StringTokenizer; public class Play { private final static String DELIMITERS = " .?!()[]{}|/&\\,;:-\'\"\t\n\r"; private String fileName; public Play( String fileName ) { this.fileName = fileName; } public int startsWith( char targetChar ) throws IOException { BufferedReader inputFile = new BufferedReader( new FileReader( fileName) ); String buffer = null; int wordCount = 0; targetChar = Character.toLowerCase( targetChar ); buffer = inputFile.readLine(); while( buffer != null ) { buffer = buffer.toLowerCase(); StringTokenizer words = new StringTokenizer( buffer, DELIMITERS ); while( words.hasMoreElements() ) { String word = (String) words.nextElement(); if ( word.charAt( 0 ) == targetChar ) wordCount++; } buffer = inputFile.readLine(); } return wordCount; } public int wordsOfLength( int targetLength ) throws IOException { BufferedReader inputFile = new BufferedReader( new FileReader( fileName) ); String buffer = null; int wordCount = 0; buffer = inputFile.readLine(); while( buffer != null ) { buffer = buffer.toLowerCase(); StringTokenizer words = new StringTokenizer( buffer ); while( words.hasMoreTokens() ) { String word = words.nextToken(); if ( word.length() == targetLength ) wordCount++; } buffer = inputFile.readLine(); } return wordCount; } public int numberOfPalindromes() throws IOException { BufferedReader inputFile = new BufferedReader( new FileReader( fileName) ); String buffer = null; int wordCount = 0; buffer = inputFile.readLine(); while( buffer != null ) { buffer = buffer.toLowerCase(); StringTokenizer words = new StringTokenizer( buffer ); while( words.hasMoreTokens() ) { String word = words.nextToken(); if ( isAPalindrome( word ) ) wordCount++; } buffer = inputFile.readLine(); } 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; } }