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

思路:分别设存放字母和字母出现次数的数组,遍历文件内容,将字母及出现频率按由高到低的顺序输出

源码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class word
{
    static String str="";
    static String str1="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    static char ch1 []=str1.toCharArray();//存放字母的数组
    public static double num[]=new double[100];//存放字母出现次数的数组
    public static int sum=0;//出现的字母个数
    //读取文件内容
    public static void read()
    {  
        Scanner scan  =new Scanner(System.in);
        File file = new File("D:\\h\\halibote\\Harry Potter and the Sorcerer's Stone.txt");
        int score = 0;
        StringBuffer result = new StringBuffer();
        try
        {
            FileReader r = new FileReader(file);
            BufferedReader br = new BufferedReader(r);
            int i=0;
            str=br.readLine();
            while(str!=null)
            {
               for(int j=0;j<str.length();j++)
               {
                   for(int k=0;k<str1.length();k++)
                   {
                       if(str.charAt(j)==str1.charAt(k))
                       {
                           sum++;
                           num[k]++;
                       }
                   }
               }
               str=br.readLine();
           }
            br.close();
            for(int p=0;p<str1.length()-1;p++)
            {
                int o=p;
                for(int q=p;q<str1.length();q++)
                {
                    if(num[o]<num[q])
                    {
                        o=q;
                    }
                }
                if(o!=p)
                {
                    char ff=ch1[o];
                    ch1[o]=ch1[p];
                    ch1[p]=ff;
                    double fff=num[o];
                    num[o]=num[p];
                    num[p]=fff;   
                }
            }
            for(int k=0;k<str1.length();k++)
            {
                   num[k]=num[k]/sum*100;
                   System.out.print(ch1[k]);
                   System.out.printf("%.2f",num[k]);
                   System.out.println("%");
            }   
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } 
    public static void main(String[] args)
    {
        read();
    }
}
 

要求2:输出单个文件中的前n个最常出现的单词

思路:

遍历文件,读取所有单词并存入数组

对读取的单词进行去重并存入新数组

统计单词出现次数并将所统计每个单词的出现次数存入一数组

按出现次数由高到低的顺序输出n个单词及出现次数

源码

import java.io.File;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Scanner;
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; 
public class word1

    private static String str="";
    private static Scanner sc=new Scanner(System.in);
    private static BufferedReader cin=null;
    private static String a[]=new String[1000000];//存放从文件中读取的所有单词
    private static String c[]=new String[10000000];//存放去重后单词
    private static int b[]=new int[1000000];//存放单词出现次数
    private static int length=0;//单词总个数
    private static int length1=0;//去重后单词个数
    private static int nn=0;
    private static int j=0;
    static File[] list = new File("D:\\h").listFiles();
   
    //读取文件内容
    public static void Readfile()
    {
        File file=new File("D:\\h\\halibote\\Harry Potter and the Sorcerer's Stone.txt");                               
        try
        {
            InputStreamReader read = new InputStreamReader(new FileInputStream(file),"UTF-8");
            cin=new BufferedReader(read);
            str=cin.readLine();
            cun();
            cin.close();
            read.close();
        }
        catch(IOException e) {
            System.out.println("读取失败!");
            e.printStackTrace();
        }
    }
   
    //将单词存到数组a
    public  static void cun() throws IOException
    {
     { 
      while(str!=null)
      {
       int i=0;
       str=str.toLowerCase(); //把大写改成小写
       for(i=0;i<str.length();i++)
       {
        if((str.charAt(i)>96&&str.charAt(i)<123))
        {                   
         a[j]=a[j]+str.charAt(i);   
        }
        if(str.charAt(i)==' '||str.charAt(i)==','||str.charAt(i)=='.')
        {
         if(!a[j].equals(""))
         {
          j=j+1;
          a[j]="";
         }
        }  
       }             
       str=cin.readLine();
      }
      length=j;
     }
    }
    //去重
    public static void Statistics()
    {
        for(int k=0;k<length;k++)
        {
            b[k]=0;
        }
        c[0]=a[0];
        int tt=1;
        Boolean rt=true;
        for(int i=1;i<length;i++)
        {
            rt=false;
            for(int j=0;j<tt;j++)
            {
                if(a[i].equals(c[j]))
                {
                    rt=true;
                    break;
                }
            }
            if(!rt)
            {
                c[tt]=a[i];
                tt++;
            }
        }
        length1=tt;
        for(int i=0;i<length1;i++)
        {
            for(int j=0;j<length;j++)
            {
                if(c[i].equals(a[j]))
                {
                    b[i]++;
                }
            }
        }
    }
   
    //排序
    public  static void Sorting()
    {
        int t3=0;
        int t2=0;
        String sr="";
        for(int i=0;i<length1-1;i++)
        {
            t3=i;
            for(int j=i+1;j<length1;j++)
            {
                if(b[t3]<b[j])
                {
                    t3=j;
                }
            }
            if(t3!=i)
            {
               t2=b[i];
               b[i]=b[t3];
               b[t3]=t2;
               sr=c[i];
               c[i]=c[t3];
               c[t3]=sr;
            }
         }
    }
   
    //显示
    public  static void show()
    {
        for(int k=0;k<nn;k++)
        {
            System.out.print(c[k]+"\t"+b[k]+"   ");
            System.out.printf("%.2f",(double)b[k]/length1*100);
            System.out.print("%");
            System.out.println("");
        }
    }
  
    public static void main(String[] args) throws IOException
    {
           System.out.println("请输入需要统计的个数:");
           nn=sc.nextInt();
           a[0]="";
           Readfile();                   
           Statistics();
           Sorting();
           show();  
    } 
}
 
功能1:输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字典序排列
 
思路:只需将输出结果改为单词加出现次数并写入文件,其他与要求2一致
 
源码:

import java.io.File;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Scanner;
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; 
public class word2

    private static String str="";
    private static Scanner sc=new Scanner(System.in);
    private static BufferedReader cin=null;
    private static String a[]=new String[1000000];
    private static String c[]=new String[10000000];
    private static int b[]=new int[1000000];
    private static int length=0;
    private static int length1=0;
    private static int nn=0;
    private static int j=0;
    static File[] list = new File("D:\\h").listFiles();
    public static void Readfile()
    {
        File file=new File("D:\\h\\halibote\\Harry Potter and the Sorcerer's Stone.txt");                               
        try
        {
            InputStreamReader read = new InputStreamReader(new FileInputStream(file),"UTF-8");
            cin=new BufferedReader(read);
            str=cin.readLine();
            cun();
            cin.close();
            read.close();
        }
        catch(IOException e) {
            System.out.println("读取失败!");
            e.printStackTrace();
        }
    }
   
    //将单词存到数组a
    public  static void  cun() throws IOException
    {
     {
      while(str!=null)
      {
       int i=0;
       str=str.toLowerCase(); //把大写改成小写
       for(i=0;i<str.length();i++)
       {
        if((str.charAt(i)>96&&str.charAt(i)<123))
        {                   
         a[j]=a[j]+str.charAt(i);   
        }
        if(str.charAt(i)==' '||str.charAt(i)==','||str.charAt(i)=='.')
        {
         if(!a[j].equals(""))
         {
          j=j+1;
          a[j]="";
         }
                    }
       }             
       str=cin.readLine();
      }
      length=j;
     }
    }
   
    //去重
    public static void Statistics()
    {
        for(int k=0;k<length;k++)
        {
            b[k]=0;
        }
        c[0]=a[0];
        int tt=1;
        Boolean rt=true;
        for(int i=1;i<length;i++)
        {
            rt=false;
            for(int j=0;j<tt;j++)
            {
                if(a[i].equals(c[j]))
                {
                    rt=true;
                    break;
                }
            }
            if(!rt)
            {
                c[tt]=a[i];
                tt++;
            }
        }     
        length1=tt;
        for(int i=0;i<length1;i++)
        {
            for(int j=0;j<length;j++)
            {
                if(c[i].equals(a[j]))
                {
                    b[i]++;
                }
            }
        }
    }
   
    //排序
    public  static void  Sorting()
    {
        int t3=0;
        int t2=0;
        String sr="";
        for(int i=0;i<length1-1;i++)
        {
            t3=i;
            for(int j=i+1;j<length1;j++)
            {
                if(b[t3]<b[j])
                {
                    t3=j;
                }
            }
           if(t3!=i)
           {
               t2=b[i];
               b[i]=b[t3];
               b[t3]=t2;
               sr=c[i];
               c[i]=c[t3];
               c[t3]=sr;
           }
        }
    }
    //将输出结果写入文本文件
    public static void Writefile() throws IOException
    {
        File file=new File("D:\\h\\halibote\\t1.txt");
        if(!file.exists())
            file.createNewFile();
        FileWriter write = new FileWriter(file,true);
        BufferedWriter out=new BufferedWriter(write);
        for(int i=0;i<length1;i++)
        {
            StringBuffer sb=new StringBuffer();
            out.write("这是第"+(i+1)+"个: ");   
            out.write(c[i]+"\t"+b[i]);
            out.write("\r\n");
        }       
        out.close();
    }
   
    //显示
    public static void show1()
    {
        for(int k=0;k<length1;k++)
        {
                System.out.print(c[k]+"\t \t\t"+b[k]+"\n");       
        }
    }
   
    public static void main(String[] args) throws IOException
    {
           a[0]="";
           Readfile();                   
           Statistics();
           Sorting(); 
           System.out.println("程序中所有不重复的单词!");
           show1();
           Writefile();
    } 
}

java单词统计的更多相关文章

  1. Java实验--统计字母出现频率及其单词个数

    本周的实验要求在之前实现统计单词的基础之上(可以见之前博客的统计单词的那个实验),对其进行修改成所需要的格式,统计字母出现频率的功能,并按照一定的格式把最终结果的用特定的格式在文本中显示出来 统计过程 ...

  2. JAVA实验--统计文章中单词的个数并排序

    分析: 1)要统计单词的个数,就自己的对文章中单词出现的判断的理解来说是:当出现一个非字母的字符的时候,对前面的一部分字符串归结为单词 2)对于最后要判断字母出现的个数这个问题,我认为应该是要用到ma ...

  3. java源码——文件读写和单词统计

    本文要解决的问题:"键盘输入一段英语语句,将这段话写入content.txt中,然后输出这段话,并且统计语句中英文单词的数目以及各个单词出现的次数." 分析问题知,核心是文件读写和 ...

  4. java课程课后作业190502之单词统计续集

    第1步:输出单个文件中的前 N 个最常出现的英语单词. 功能1:输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字典序排列. 功能2: 指定文件目录,对目录下每一个文件执行统 ...

  5. Java实现单词统计

    原文链接: https://www.toutiao.com/i6764296608705151496/ 单词统计的是统计一个文件中单词出现的次数,比如下面的数据源 其中,最终出现的次数结果应该是下面的 ...

  6. MapReduce 单词统计案例编程

    MapReduce 单词统计案例编程 一.在Linux环境安装Eclipse软件 1.   解压tar包 下载安装包eclipse-jee-kepler-SR1-linux-gtk-x86_64.ta ...

  7. 2、 Spark Streaming方式从socket中获取数据进行简单单词统计

    Spark 1.5.2 Spark Streaming 学习笔记和编程练习 Overview 概述 Spark Streaming is an extension of the core Spark ...

  8. scala基本语法和单词统计

    scala 基本语法 1.声明变量 (1)val i = 1 使用val声明的变量值是不可变的,相当于java里final修饰的变量,推荐使用. (2)var i = "hello" ...

  9. Storm基础概念与单词统计示例

    Storm基本概念 Storm是一个分布式的.可靠地.容错的数据流处理系统.Storm分布式计算结构称为Topology(拓扑)结构,顾名思义,与拓扑图十分类似.该拓扑图主要由数据流Stream.数据 ...

随机推荐

  1. 「Flink」Flink的状态管理与容错

    在Flink中的每个函数和运算符都是有状态的.在处理过程中可以用状态来存储数据,这样可以利用状态来构建复杂操作.为了让状态容错,Flink需要设置checkpoint状态.Flink程序是通过chec ...

  2. Spring Bean 在容器的生命周期是什么样的?

    Spring Bean 的初始化流程如下: 实例化 Bean 对象 Spring 容器根据配置中的 Bean Definition(定义)中实例化 Bean 对象. Bean Definition 可 ...

  3. Java学习之String、StringBuffer、StringBuilder

    String 我们知道字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,而且字符串我们使用的非常多.JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池 ...

  4. OSI七层协议大白话解读

    参考链接:https://www.cnblogs.com/zx125/p/11295985.html 国际标准化组织(ISO)制定了osi七层模型,iso规定了各种各样的协议,并且分了7层 应用层 应 ...

  5. MySQL 8 InnoDB 集群生产部署

    生产部署InnoDB集群 1.先决条件 InnoDB集群使用组复制技术,所以InnoDB中的实例需要满足组复制要求.可以查看MySQL文档中组复制相关的部分,也可以通过AdminAPI提供的dba.c ...

  6. python文件操作汇总day7

    Python处理文件 文件操作分为读.写.修改,我们先从读开始学习 读文件 示例1: f = open(file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt',mode='r',enc ...

  7. js中的节点遍历+类数组对象

    firstChild  第一个子元素 lastChild  最后一个子元素 childNodes[n]  =   childNodes.item(n)    第n+1个子元素 parentNode  ...

  8. 如何修复MacBook Pro过热:保持MacBook散热的13个技巧

    尽管MacBook Pro是一台能处理繁重工作量的高能效机器,但它却无法像市场上其他笔记本电脑一样避免过热.至于什么可以防止发热,那不是一两个技巧就能解决的问题.相反,这是一组技巧可以解决的挑战. 因 ...

  9. VS2019 backspace键失效,无法使用

    原因:据网上其他资源了解,可能是和其它的快捷键冲突了,但是我这边没有设置快捷键,突然就这样了,出现原因不详,有了解的伙伴可以留言学习一下. 解决方法:工具=>设置=>键盘=>点击重置

  10. CMake 复制文件方法

    我们经常会遇到将第三方库文件复制到项目运行时文件夹,或者将子项目生成的库文件复制到项目运行时文件夹的情况,本文介绍FILE-COPY.add_custom_command.ADD_CUSTOM_TAR ...