求一篇英文文章中各个字母出现的频率,不区分大小写.
思路:
(1)首先定义一个数组freArray= new int[26],存放每个单词的出现频率.
(2)读取该篇文章到内存中,并形成一个字符数组.
(3)遍历该字符数组
----首先判断被遍历到字符c的ascii值是否大于'A'而且小于'Z',如果是,则freArray[c-'A']++
----然后判断被遍历到字符c的ascii值是否大于'a'而且小于'z',如果是,则freArray[c-'a']++
(4)然后输出freeArray中各个字母的统计值.
实现代码(Java):
package com.test.test; import java.io.File; import java.io.FileReader; import java.io.IOException; public class ComputeCharFrequency { /** * Compute the frequencies of letter occurrence * * @param args */ public static void main(String[] args) { int[] freArray = new int[26]; char[] charArray = loadCharArrayFromFileName("c:/article.txt"); computeFrequency(freArray, charArray); for (int i = 0; i < freArray.length; i++) { System.out.println(((char) ('a' + i)) + ":" + freArray[i]); } } public static void computeFrequency(int[] freArray, char[] charArray) { for (int i = 0; i < charArray.length; i++) { if (charArray[i] >= 'A' && charArray[i] <= 'Z') { freArray[charArray[i] - 'A']++; } if (charArray[i] >= 'a' && charArray[i] <= 'z') { freArray[charArray[i] - 'a']++; } } } /** * read a text file's content to a Char Array * @param name * @return Char Array */ public static char[] loadCharArrayFromFileName(String name) { char[] charArray = new char[50000]; File file = new File(name); FileReader fr = null; try { fr = new FileReader(file); fr.read(charArray); return charArray; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } }