zoukankan      html  css  js  c++  java
  • 单词统计——续

    设计思想:首先要解决的是读取txt文件的问题,然后把它存入一个数组里面,通过if语句和for循环就可以完成对单词出现次数的统计(但这样似乎很复杂);

    问题:网上有读取txt 文件的代码,但问题是我一直看不懂他们是如何读取的,看不懂各段代码的含义,感觉很烦,无力把txt文件写入数组。

    package tongji;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.text.DecimalFormat;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Scanner;
    import java.util.StringTokenizer;
    
    public class tongjixu {
    public static void main(String[] args)throws IOException
    {
        
        List<Integer> list=new ArrayList<>();
        Scanner scan=new Scanner(System.in);
        File f = new File("D:\piao.txt");
         FileInputStream fip = new FileInputStream(f);
        InputStreamReader reader = new InputStreamReader(fip, "gbk");
        StringBuffer sb = new StringBuffer();
        while (reader.ready()) {
            sb.append((char) reader.read());
        }
    
        reader.close();
        fip.close();
        int i;
        int option=10;
        while(option!=0)
        {
             System.out.println("1、统计字母的个数  2、统计单词个数 3、统计出现最多次数的几个单词  4、统计删除无用表后的单词 0、退出");
            option=scan.nextInt();
        if(option==1)
      tongjizimu(sb.toString());
       if(option==2)
           tongjidanci(sb.toString());
       if(option==3)
       {
           int sum1=0;
           System.out.println("显示前n个出现最多的单词,请输入n");
           sum1=scan.nextInt();
           tongjidanci1(sb.toString(),sum1);
       }
        
        if(option==4) {
             tongjidanci2(sb.toString());
        }
        if(option==0)
        {
            System.out.println("已退出。");
        }
    }}
    static char ch(char c)
    {
        if(!(c>=97&&c<=122))
            c+=32;
        return c;
    }
    static String[] StatList(String str) {
           StringBuffer sb = new StringBuffer();
           HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打开一个哈希表
           String[] slist = str.split("\W+");
           int sum=0;
           int sum1=0;
           for (int i = 0; i < slist.length; i++) {
                 if (!has.containsKey(slist[i])) { // 若尚无此单词
                         has.put(slist[i], 1);
                         sum++;
                         sum1++;
                 } else {//如果有,就在将次数加1
                        Integer nCounts = has.get(slist[i]);
                        
                         has.put(slist[i],nCounts+1 );
                }
             }
           int temp=0;
           int temp1=0;
           String []a=new String[sum];
           int []b=new int[sum1];
           Iterator iterator = has.keySet().iterator();
              while(iterator.hasNext()){
                     String word = (String) iterator.next();
                     a[temp]=word;
                     temp++;
              }
              return a;
    }
    static int[] StatList1(String str) {
           StringBuffer sb = new StringBuffer();
           HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打开一个哈希表
           String[] slist = str.split("\W+");
           int sum=0;
           int sum1=0;
           for (int i = 0; i < slist.length; i++) {
                 if (!has.containsKey(slist[i])) { // 若尚无此单词
                         has.put(slist[i], 1);
                         sum++;
                         sum1++;
                 } else {//如果有,就在将次数加1
                        Integer nCounts = has.get(slist[i]);
                         has.put(slist[i],nCounts+1 );
                         
                }
             }
           int temp=0;
           int temp1=0;
           String []a=new String[sum];
        int []b=new int[sum1];
           Iterator iterator = has.keySet().iterator();
              while(iterator.hasNext()){
                     String word = (String) iterator.next();
                     b[temp1]=has.get(word);
                     temp1++;
              }
              return b;
    }
    public static void tongjizimu(String a)
    {
        DecimalFormat df=new DecimalFormat("######0.00");
        int i;
        String A=a;
        String M="abcdefghijklmnopqrstuvwxyz";
       String temp = "";
        char NUM[]=new char[A.length()];
        char Z[]=new char[26];
        int X[]=new int[26];
        int MAX=0;
        Z=M.toCharArray();
        for(int k=0;k<26;k++)
        {
            X[k]=0;
        for(i=0;i<A.length();i++)
        {
            NUM[i]=A.charAt(i);
            if(Z[k]==NUM[i]||Z[k]==ch(NUM[i]))
            {
                X[k]++;
            }
        }
        }
        System.out.println("这篇文章中英文字母个数分别为:");
        double sum=0;
        System.out.println("排序如下:");
        for(i=0;i<25;i++)
            for(int k=0;k<25-i;k++)
            {
                if(X[k]<X[k+1])
                {
                    int temp2=X[k];
                    X[k]=X[k+1];
                    X[k+1]=temp2;
                    char temp3=Z[k];
                    Z[k]=Z[k+1];
                    Z[k+1]=temp3;
                }
            }
        for(i=0;i<26;i++)
        {
        System.out.println(Z[i]+"字母个数为:"+X[i]);
        sum=sum+X[i];
        }
        for(i=0;i<26;i++)
        {
            double jkl=(X[i])/sum*100;
            System.out.println(Z[i]+"字母频率为:"+df.format(jkl)+"%");
        }
    }
    public static void tongjidanci(String a)
    {
        int i;
         StringTokenizer st = new StringTokenizer(a,",.! 
    ");
            String []a1=StatList(a);
            int[]b1=StatList1(a);
            System.out.println("//////////////////////////////");
            for(i=0;i<a1.length-1;i++)
                for(int j=0;j<a1.length-1-i;j++)
                {
                    if(b1[j]<b1[j+1])
                    {
                        int temp6=b1[j];
                        b1[j]=b1[j+1];
                        b1[j+1]=temp6;
                        String temp7=a1[j];
                        a1[j]=a1[j+1];
                        a1[j+1]=temp7;
                    }
                }
           for(i=0;i<a1.length-1;i++)
           {
               System.out.println("单词:"+a1[i]+"  且出现的次数:"+b1[i]);
           }
    }
    public static void tongjidanci1(String a,int n)
    {
        int i;
         StringTokenizer st = new StringTokenizer(a,",.! 
    ");
            String []a1=StatList(a);
            int[]b1=StatList1(a);
            System.out.println("//////////////////////////////");
            for(i=0;i<a1.length-1;i++)
                for(int j=0;j<a1.length-1-i;j++)
                {
                    if(b1[j]<b1[j+1])
                    {
                        int temp6=b1[j];
                        b1[j]=b1[j+1];
                        b1[j+1]=temp6;
                        String temp7=a1[j];
                        a1[j]=a1[j+1];
                        a1[j+1]=temp7;
                    }
                }
           for(i=0;i<n;i++)
           {
               System.out.println("单词:"+a1[i]+"  且出现的次数:"+b1[i]);
           }
    }
    public static void tongjidanci2(String a)
    {
        int i;
         StringTokenizer st = new StringTokenizer(a,"");
            String []a1=StatList(a);
            int[]b1=StatList1(a);
            System.out.println("//////////////////////////////");
            for(i=0;i<a1.length-1;i++)
                for(int j=0;j<a1.length-1-i;j++)
                {
                    if(b1[j]<b1[j+1])
                    {
                        int temp6=b1[j];
                        b1[j]=b1[j+1];
                        b1[j+1]=temp6;
                        String temp7=a1[j];
                        a1[j]=a1[j+1];
                        a1[j+1]=temp7;
                    }
                }
           for(i=0;i<a1.length-1;i++)
           {                                                        
               System.out.println("单词:"+a1[i]+"  且出现的次数:"+b1[i]);
           }
    }
    
    }

     

  • 相关阅读:
    BIOS中的UEFI和Legacy启动模式
    php和java中的加密和解密
    Linux 的进程状态
    C++继承:公有,私有,保护
    编译器在构造函数里都做了些什么?
    操作符重载
    C++对象模型学习笔记
    sizeof操作符-结构体与类大小
    C++之智能指针
    C/C++笔试题整理
  • 原文地址:https://www.cnblogs.com/sljslj/p/11071302.html
Copyright © 2011-2022 走看看