输出《Harry Potter and the Sorcerer's Stone》英文i的字母数量并排序

要求1:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。
            字母频率 = 这个字母出现的次数 / (所有A-Z,a-z字母出现的总数)
            如果两个字母出现的频率一样,那么就按照字典序排列。

实验思路:利用每个字母的阿斯克码值不同来记录每个字母。定义一个二维数组,字母区分大小写一个52个,定义一个二维数组a[52][2]。用来存字母的阿斯克码值,另一个用来存其对应字母的个数。

              最后进行倒叙排序,求出其百分比,并保留两位小数。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.lang.reflect.Array;
import java.nio.channels.NonWritableChannelException;
import java.text.DecimalFormat;
import java.util.Scanner;

public class Hlbt {
	static double  a[][]=new double [52][2];
	
	static int number;
	public static void main(String[] args) {
		
		File file= new File("Harry Potter and the Sorcerer's Stone.txt");
		FileReader fr=null;
		BufferedReader br=null;
		try {
			fr=new FileReader(file);
			br=new BufferedReader(fr);
			String  str=null;
			while((str=br.readLine())!=null)
			{
				//System.out.println(str);
				char [] c=str.toCharArray();
				//String b[]=new String[10000];
				for(int i=0;i<str.length();i++)
				{
					int x=Integer.valueOf(c[i]);
					if(x>=65&&x<=90)
					{
						a[x-65][1]++;
						number++;
					}
					else if(x>=97&&x<=122)
					{
						a[x-97+26][1]++;
						number++;
					}
				}
				
			}
			for(int j=0;j<52;j++)
			{
				if(j<26)  a[j][0]=j+65;
				else a[j][0]=j+97-26;
			}
			for (int i = 0; i<51; i++)
		        for (int j = 0; j < 51- i; j++)
		        {
		            
		            if (a[j][1] < a[j + 1][1]) {
		                double  temp = a[j][1];
		                a[j][1]= a[j + 1][1]; 
		                a[j + 1][1] = temp;
		                double m = a[j][0];
		                a[j][0]= a[j + 1][0]; 
		                a[j + 1][0] = m;
		            }
		        }
			 for (int j=0;j<52;j++)
			 { 
				double b=a[j][1]/number*100;
				 DecimalFormat df = new DecimalFormat("#.00");
				System.out.println((char)(int)a[j][0]+":"+df.format(b)+"%");
			 }
			
		
		
		} catch (Exception e) {
			// TODO: handle exception
			
		}
	}
}

  

原文地址:https://www.cnblogs.com/zwx655/p/11806131.html