学的最蒙的流来啦!!!

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

//Main.java
package org.example;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;

public class Main{
    public static void main(String[] args) throws IOException {
//用于指定输出的数据格式
                 DecimalFormat df=new DecimalFormat("######0.00");
//获取文件
                  FileInputStream fis = new FileInputStream("HP7.txt");
//以某种指定方式读取
                 InputStreamReader isr = new InputStreamReader(fis, "gbk");
//主要用于拼接字符串
                 StringBuffer sb = new StringBuffer();
//拼接字符串的操作
                 while (isr.ready()) {
                         sb.append((char) isr.read());
                     }

                 isr.close();
                 fis.close();

                 int i;
                 //将StringBuffer类型的数据转换为String类型
                 String A=sb.toString();
                 //存储26个字母
                 String M="abcdefghijklmnopqrstuvwxyz";
                 String temp = "";
                 char NUM[]=new char[A.length()];
                 char X[]=new char[26];
                 int Y[]=new int[26];
                 //将上述的大字符串转换为单个字符存储在数组里面
                 X=M.toCharArray();
                 
                 for(int k=0;k<26;k++)
                     {
                         Y[k]=0;
                     for(i=0;i<A.length();i++)
                         {
                             NUM[i]=A.charAt(i);
                             if(X[k]==NUM[i]||X[k]==ch(NUM[i]))
                                 {
                                     Y[k]++;
                                 }
                         }
                     }


                 //冒泡排序
                 double sum=0;
                 for(i=0;i<25;i++)
                         for(int k=0;k<25-i;k++)
                         {
                             if(Y[k]<Y[k+1])
                                 {
                                     int temp2=Y[k];
                                     Y[k]=Y[k+1];
                                     Y[k+1]=temp2;

                                     char temp3=X[k];
                                     X[k]=X[k+1];
                                     X[k+1]=temp3;
                                 }
                         }
                 //计算字母总数
                 for(i=0;i<26;i++) {
                         sum=sum+Y[i];
                     }

                 for(i=0;i<26;i++)
                     {
                         double pin=(Y[i])/sum*100;
                     System.out.println(X[i]+"个数:"+Y[i]+", 频率为:"+df.format(pin)+"%");
                     }

    }

    //转为小写
    static char ch(char c){
        if(!(c>=97&&c<=122)){
            c+=32;
        }
        return c;
    }


}

第二阶段:输出某个文件中最常出现的前N个单词

//Main.java
public class Main{
public static void main(String[] args) throws IOException {
        //输入个数
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();

        String s;
        //获取到相关文件
        BufferedReader br=new BufferedReader(new FileReader("HP7.txt"));
        BufferedWriter bw=new BufferedWriter(new FileWriter("2022.txt"));
        StringBuffer sb=new StringBuffer();

        //利用StringBuffer拼接字符串
        while((s=br.readLine())!=null){
            sb.append(s);
        }

        //将StringBuffer类型数据转换为String类型,并且,将其转为小写表示
        String m=sb.toString().toLowerCase();

        //匹配由26个字母以及数字组成的字符串
        String []ss=m.split("[^a-zA-Z0-9]+");

        int count=0;
        int num=1;
        Map<String,Integer> map=new TreeMap<String,Integer>();

        for(int i=0;i<ss.length;i++){
            if(map.containsKey(ss[i])){
                count=map.get(ss[i]);
                map.put(ss[i],count+1);
            }
            else{
                map.put(ss[i],1);
            }
        }

        List<Map.Entry<String,Integer>> list=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());

        //降序排序
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });

        for(Map.Entry<String,Integer> ma:list){
            if(num<=n){
                System.out.println(ma.getKey()+":"+ma.getValue());
                num++;
            }
        }
br.close();
bw.close();
    }
}


一定要记得在使用完之后,关闭文件流,如果不关闭的话,有可能导致出错;并且,会使得内容无法输入到相应的文件中
我为什么会知道?因为我就犯了这样的错误。。。

第三阶段:

1、输出文件中所有不重复的单词,从多到少排序,输出次数同样多的,以字典序排序
2、指定文件目录,对目录下的每一个文件执行1、的操作
3、指定文件目录,能够递归遍历目录下的所有子目录中的文件,对每个文件执行1、的操作

//Main.java---1、
public class Main{
public static void main(String[] args) throws IOException {
        //输入要输出的统计行数
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        String s;//协助进行拼接字符串的操作
        //获取到文件
        BufferedReader br = new BufferedReader(new FileReader("HP7.txt"));
        //写入到对应文件
        BufferedWriter bw = new BufferedWriter(new FileWriter("2022.txt"));
        //拼接字符串必须用到的数据类型
        StringBuffer sb = new StringBuffer();

        //拼接操作
        while ((s = br.readLine()) != null) {
            sb.append(s);
        }

        int count = 0;
        int num = 1;

        //转换为小写
        String m = sb.toString().toLowerCase();

        //匹配26个字母和相应字符
        String[] mm = m.split("[^a-zA-z0-9]+");

        Map<String, Integer> map = new TreeMap<String, Integer>();

        for (int i = 0; i < mm.length; i++) {
            if (map.containsKey(mm[i])) {
                count = map.get(mm[i]);
                map.put(mm[i], count + 1);
            } else {
                map.put(mm[i], 1);
            }
        }

        List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());

        //降序排序
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });

        //遍历结果
        for(Map.Entry<String,Integer> ma:list){
            if(num<=n) {
                bw.write(ma.getKey() + ":" + ma.getValue());
                bw.newLine();
                System.out.println(ma.getKey() + ":" + ma.getValue());
                num++;
            }
            else break;
        }

        bw.close();
        br.close();
    }

}


这一块儿并不是很理解,转战讲解啦!

//Main.java---2、3、
public class Main{
public static void main(String[] args) throws IOException {
        String s;

        File file=new File("D:\\Study\\Code\\JavaWeb\\IDEA\\tt1021");
        fileName(file);

    }

    public static void fileName(File file) throws IOException {
        File[] listfiles=file.listFiles();
        for(File ff:listfiles){
            if(ff.isDirectory()){
                fileName(ff);
            }
            else{
                System.out.println(ff);

                String s;
                int count=0;
                int num=1;
                BufferedReader br=new BufferedReader(new FileReader(ff));

                StringBuffer sb=new StringBuffer();
                while((s=br.readLine())!=null){
                    sb.append(s);
                }
                String m=sb.toString().toLowerCase();

                String[] mm=m.split("[^a-zA-z0-9]+");

                Map<String,Integer> map=new TreeMap<String,Integer>();

                for(int i=0;i<mm.length;i++){
                    if(map.containsKey(mm[i])){
                        count=map.get(mm[i]);
                        map.put(mm[i],count+1);
                    }else{
                        map.put(mm[i],1);
                    }
                }

                List<Map.Entry<String,Integer>> list=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());

                for(Map.Entry<String,Integer> ma:list){
                    System.out.println(ma.getKey()+":"+ma.getValue());
                }
             }
        }
    }

}
}

注意:相关的Java包自己实现一下吧!

那这次分享就到这里啦!我们下次再见!

原文地址:http://www.cnblogs.com/liuzijin/p/16815269.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性