import java.util.Scanner; import java.io.File; public class LetterFreq2 { private static final String LETTERS = "abcdefghijklmnopqrstuvwxyz"; private int[] counts; private int numLetters; public LetterFreq2(String fileName) throws java.io.FileNotFoundException { this.counts = new int[LetterFreq2.LETTERS.length()]; this.numLetters = 0; Scanner infile = new Scanner(new File(fileName)); while (infile.hasNext()) { String nextWord = infile.next(); for (int c = 0; c < nextWord.length(); c++) { char ch = nextWord.charAt(c); if (Character.isLetter(ch)) { int index = LetterFreq2.LETTERS.indexOf(Character.toLowerCase(ch)); this.counts[index]++; this.numLetters++; } } } } public int getCount(char ch) { if (Character.isLetter(ch)) { int index = LetterFreq2.LETTERS.indexOf(Character.toLowerCase(ch)); return this.counts[index]; } else { return 0; } } public double getPercentage(char ch) { if (Character.isLetter(ch) && this.numLetters > 0) { int index = LetterFreq2.LETTERS.indexOf(Character.toLowerCase(ch)); return Math.round(1000.0*this.counts[index]/this.numLetters)/10.0; } else { return 0.0; } } public void showCounts() { for (int i = 0; i < LetterFreq2.LETTERS.length(); i++) { char ch = LetterFreq2.LETTERS.charAt(i); System.out.println(ch + ": " + this.getCount(ch) + "\t(" + this.getPercentage(ch) + "%)"); } } }