单词统计(续)

这次的功能延续上次的,同时又有所难度加深

功能要求:

第1步:输出单个文件中的前 N 个最常出现的英语单词。(上次的)

第2步:第二步:  支持 stop words 

频率出现最高的单词一般都是 "a",  "it", "the", "and", "this", 这些词, 可以做一个 stop word 文件 (停词表), 在统计词汇的时候,跳过这些词。  我们把这个文件叫 "stopwords.txt" file.  

第3步:常用的短语

file2.java

package lianxi;

import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import lianxi.Word;
                                      
public class file2 {
    public void file2() throws IOException      //主函数
    {
        Word word=new Word();                                      //单词的链头
        Word lian,xin;                                             
        String str="";
        FileReader f=new FileReader("D:/111.txt");                //读取英文文件
        char[] c=new char[1];                                 //每次读取一个字母
        int b=0;
        boolean exist=false;                              //判断单词是否存在于  word 链中
        while((b=f.read(c))!=-1)                              //每次读取一个字母直到最后
        {
            //如果字符为  换行、空格、单引号、双引号、逗号、句号  则为一个单词的结束及另一个单词的开始
            if(String.valueOf(c).equals("
")||String.valueOf(c).equals("
")||String.valueOf(c).equals(" ")||String.valueOf(c).equals("-")||String.valueOf(c).equals(",")||String.valueOf(c).equals(".")||String.valueOf(c).equals(""")||String.valueOf(c).equals("'"))
            {
                lian=word;
                while(lian!=null)            
                {
                    if(lian.value.equalsIgnoreCase(str))           //如果单词在单词链中存在,则单词个数++
                    {
                        lian.geshu++;exist=true;break;
                    }
                    else
                    {
                        lian=lian.next;
                    }
                }
                if(exist==false)                        //如果不存在,则在单词链中添加
                {
                    xin=new Word(str,1);
                    xin.next=word.next;
                    word.next=xin;
                    str="";
                }
                else
                {
                    exist=false;
                    str="";
                }
            }
            else                                      //单词
            {
                str+=String.valueOf(c);
                System.out.print(c);
            }
        }
        //   循环10次
        System.out.println();
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入x,x为最多的x个单词");
        int s=scanner.nextInt();
        for(int i=1;i<=s;i++)                   
        {
            xin=new Word("",0);
            lian=word.next;
            //找到单词链中个数最多的
            while(lian!=null&&word.value.equals("The")==false&&word.value.equals("a")==false&&word.value.equals("It")==false&&word.value.equals("and")==false)
            {
                if(lian.geshu>xin.geshu)
                {
                    xin=lian;
                }
                lian=lian.next;
            }
            //输出单词链中个数最多的
            System.out.println("第"+i+"个 :"+xin.value+"个数:"+xin.geshu);
            lian=word;
            //删除单词链中单词个数最多的
            while(lian.next!=null)
            {
                if(lian.next.value.equalsIgnoreCase(xin.value))
                {
                    lian.next=lian.next.next;
                    break;
                }
                lian=lian.next;
            }
        }
    }
}
View Code

去掉stop words主要是加了一行这个while(lian!=null&&word.value.equals("The")==false&&word.value.equals("a")==false&&word.value.equals("It")==false&&word.value.equals("and")==false)

如果还要加,继续往里面写就可以了,这里并没有读stopword.txt文件

原文地址:https://www.cnblogs.com/mitang0-0/p/11061732.html