统计文本中出现的字母的百分比

从文本中读取数据

String fileName ="F:\javacx\wind.txt";
        FileReader fileReader = new FileReader(fileName);

        BufferedReader bufferedReader = new BufferedReader(fileReader);

按行读取且取单个字符,调用 changeLowwer()函数,使其不区分大小写

然后将获取的字符以及对应的百分比存入map集合中

String line =bufferedReader.readLine();
        Map map=new HashMap();//保存数据出现的次数的集合
        for (int i = 0; i < line.length(); i++) //遍历测试数据
        {
            char a=changeLowwer(line.charAt(i));
            //取出单个字符,如果是大写的字母调用changelowwer()函数转换为小写字母

            if(isSingleWord(a))
            {
                if(map.get(a)!=null)//如果这个字符已经存在
                {
                    int num=Integer.parseInt(map.get(a).toString());
                    map.put(a,num+1);//数量加一次
                }else
                {
                    map.put(a,1);//如果这个字符不存在就为1
                }
            }
        }

用选择排序排列map集合中的key值,然后顺序输出。

源码:

package TJZM;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class tjzm {

    public static void main(String[] args) throws IOException {

        String fileName ="F:\javacx\wind.txt";
        FileReader fileReader = new FileReader(fileName);

        BufferedReader bufferedReader = new BufferedReader(fileReader);

        String line =bufferedReader.readLine();
        Map map=new HashMap();//保存数据出现的次数的集合
        for (int i = 0; i < line.length(); i++) //遍历测试数据
        {
            char a=changeLowwer(line.charAt(i));
            //取出单个字符,如果是大写的字母调用changelowwer()函数转换为小写字母

            if(isSingleWord(a))
            {
                if(map.get(a)!=null)//如果这个字符已经存在
                {
                    int num=Integer.parseInt(map.get(a).toString());
                    map.put(a,num+1);//数量加一次
                }else
                {
                    map.put(a,1);//如果这个字符不存在就为1
                }
            }
        }
        Object[] aa=map.keySet().toArray();//取出集合所有的key
        int sum=0;
        int []wz=new int[aa.length];
        for(int i=0;i<aa.length;i++)//再遍历
        {
            
            sum=sum+(int)(map.get(aa[i]));
//            System.out.println(aa[i]+"出现了"+map.get(aa[i])+"次");
        }
        for(int i=0;i<aa.length-1;i++)//再遍历
        {
            for(int j=i+1;j<aa.length;j++)
            {
                if((int)map.get(aa[i])<(int)map.get(aa[j]))//选择排序
                {
                    char temp=(char)aa[i];
                    aa[i]=aa[j];
                    aa[j]=temp;
                }
            }

        }
        for(int i=0;i<aa.length;i++)//再遍历
        {
            
            System.out.println(aa[i]+"出现频率"+String.format("%6.2f%%", ((int)map.get(aa[i]))/(double)sum*100));
        }
        while (line!=null){
            //System.out.println(line);
            line = bufferedReader.readLine();
        }

        bufferedReader.close();
        fileReader.close();

    }

    static boolean isSingleWord(char a)//判断获取的字符是否是字母
    {
        if(a>='a'&&a<='z'||a>='A'&&a<='Z')
        {
            return true;
        }
        return false;
    }

    static char changeLowwer(char a)//转化大写字母为小写
    {
        if(a>='A'&&a<='Z')
        {
            return (char)(a-'A'+'a');
        }
        return a;
    }
}
原文地址:https://www.cnblogs.com/janeszj/p/10809555.html