输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。

字母频率 = 这个字母出现的次数 / (所有A-Z,a-z字母出现的总数)

如果两个字母出现的频率一样,那么就按照字典序排列。

package Statistics;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileOutput {
    private static  int[][] letter=new int[2][52];
    public static void main(String[] args) throws IOException {
        StringBuilder sb = new StringBuilder();
        File directory = new File("");//参数为空 
        String courseFile = directory.getCanonicalPath()+"/Harry Potter and the Sorcerer's Stone.txt"; 
        BufferedReader bf = new BufferedReader(new FileReader(courseFile));
        String content = null;
        while((content = bf.readLine()) != null){
            sb.append(content.trim());
        }
        for(int j=0;j<52;j++)
        {
            letter[0][j]=j;
            letter[1][j]=0;
        }    
        countCracts(sb.toString(), 'a', 'z');
        countCracts(sb.toString(), 'A', 'Z');
        for(int i=0;i<52;i++)
        {
            int max=letter[1][i],idmax=i;
            for(int j=i+1;j<52;j++)
            {
                if(max<letter[1][j])
                {
                    max=letter[1][j];
                    idmax=j;
                }
            }
            int k,t;
            k=letter[1][i];
            letter[1][i]=letter[1][idmax];
            letter[1][idmax]=k;
            t=letter[0][i];
            letter[0][i]=letter[0][idmax];
            letter[0][idmax]=t;
        }
        double m=0;
        for(int i=0;i<52;i++)
        {
            m+=letter[1][i];
        }
        for(int i=0;i<52;i++)
        {
            switch(letter[0][i])
            {
            case 0:System.out.print("A:");break;
            case 1:System.out.print("B:");break;
            case 2:System.out.print("C:");break;
            case 3:System.out.print("D:");break;
            case 4:System.out.print("E:");break;
            case 5:System.out.print("F:");break;
            case 6:System.out.print("G:");break;
            case 7:System.out.print("H:");break;
            case 8:System.out.print("I:");break;
            case 9:System.out.print("J:");break;
            case 10:System.out.print("K:");break;
            case 11:System.out.print("L:");break;
            case 12:System.out.print("M:");break;
            case 13:System.out.print("N:");break;
            case 14:System.out.print("O:");break;
            case 15:System.out.print("P:");break;
            case 16:System.out.print("Q:");break;
            case 17:System.out.print("R:");break;
            case 18:System.out.print("S:");break;
            case 19:System.out.print("T:");break;
            case 20:System.out.print("U:");break;
            case 21:System.out.print("V:");break;
            case 22:System.out.print("W:");break;
            case 23:System.out.print("X:");break;
            case 24:System.out.print("Y:");break;
            case 25:System.out.print("Z:");break;
            case 26:System.out.print("a:");break;
            case 27:System.out.print("b:");break;
            case 28:System.out.print("c:");break;
            case 29:System.out.print("d:");break;
            case 30:System.out.print("e:");break;
            case 31:System.out.print("f:");break;
            case 32:System.out.print("g:");break;
            case 33:System.out.print("h:");break;
            case 34:System.out.print("i:");break;
            case 35:System.out.print("j:");break;
            case 36:System.out.print("k:");break;
            case 37:System.out.print("l:");break;
            case 38:System.out.print("m:");break;
            case 39:System.out.print("n:");break;
            case 40:System.out.print("o:");break;
            case 41:System.out.print("p:");break;
            case 42:System.out.print("q:");break;
            case 43:System.out.print("r:");break;
            case 44:System.out.print("s:");break;
            case 45:System.out.print("t:");break;
            case 46:System.out.print("u:");break;
            case 47:System.out.print("v:");break;
            case 48:System.out.print("w:");break;
            case 49:System.out.print("x:");break;
            case 50:System.out.print("y:");break;
            case 51:System.out.print("z:");break;
            }
            System.out.println(String.format("%.2f",(double)(letter[1][i]/m*100))+"%");
        }
    }
    private static void countCracts(String str, char start, char end) {
        for(char a = start; a <= end; a++){
            int cractCount = str.length() - str.replaceAll(String.valueOf(a), "").length();
            if(a>='A'&&a<='Z')
            {
                int m=(int)(a-'A'+1);
                switch(m)
                {
                case 1:letter[1][0]=cractCount;break;
                case 2:letter[1][1]=cractCount;break;
                case 3:letter[1][2]=cractCount;break;
                case 4:letter[1][3]=cractCount;break;
                case 5:letter[1][4]=cractCount;break;
                case 6:letter[1][5]=cractCount;break;
                case 7:letter[1][6]=cractCount;break;
                case 8:letter[1][7]=cractCount;break;
                case 9:letter[1][8]=cractCount;break;
                case 10:letter[1][9]=cractCount;break;
                case 11:letter[1][10]=cractCount;break;
                case 12:letter[1][11]=cractCount;break;
                case 13:letter[1][12]=cractCount;break;
                case 14:letter[1][13]=cractCount;break;
                case 15:letter[1][14]=cractCount;break;
                case 16:letter[1][15]=cractCount;break;
                case 17:letter[1][16]=cractCount;break;
                case 18:letter[1][17]=cractCount;break;
                case 19:letter[1][18]=cractCount;break;
                case 20:letter[1][19]=cractCount;break;
                case 21:letter[1][20]=cractCount;break;
                case 22:letter[1][21]=cractCount;break;
                case 23:letter[1][22]=cractCount;break;
                case 24:letter[1][23]=cractCount;break;
                case 25:letter[1][24]=cractCount;break;
                case 26:letter[1][25]=cractCount;break;
                }
            }
            if(a>='a'&&a<='z')
            {
                int m=(int)(a-'a'+1);
                switch(m)
                {
                case 1:letter[1][26]=cractCount;break;
                case 2:letter[1][27]=cractCount;break;
                case 3:letter[1][28]=cractCount;break;
                case 4:letter[1][29]=cractCount;break;
                case 5:letter[1][30]=cractCount;break;
                case 6:letter[1][31]=cractCount;break;
                case 7:letter[1][32]=cractCount;break;
                case 8:letter[1][33]=cractCount;break;
                case 9:letter[1][34]=cractCount;break;
                case 10:letter[1][35]=cractCount;break;
                case 11:letter[1][36]=cractCount;break;
                case 12:letter[1][37]=cractCount;break;
                case 13:letter[1][38]=cractCount;break;
                case 14:letter[1][39]=cractCount;break;
                case 15:letter[1][40]=cractCount;break;
                case 16:letter[1][41]=cractCount;break;
                case 17:letter[1][42]=cractCount;break;
                case 18:letter[1][43]=cractCount;break;
                case 19:letter[1][44]=cractCount;break;
                case 20:letter[1][45]=cractCount;break;
                case 21:letter[1][46]=cractCount;break;
                case 22:letter[1][47]=cractCount;break;
                case 23:letter[1][48]=cractCount;break;
                case 24:letter[1][49]=cractCount;break;
                case 25:letter[1][50]=cractCount;break;
                case 26:letter[1][51]=cractCount;break;
                }
            }
        }
    }
    
}

优质内容筛选与推荐>>
1、qml 设置tooltip,Customizing ToolTip
2、第04组 Beta冲刺(3/4)
3、[BZOJ]1297: [SCOI2009]迷路
4、GCD学习
5、Java可变参数传递中可以接收多个对象


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号