• Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词


    日期:2018.10.11

    星期四

    博客期:016

    题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中

      在程序运行之前,我试着先写了字符的字母的总结,加载代码如下:

      

     1 //如下是第一个程序的 CharBasic文件
     2 package src;
     3 
     4 public final class CharBasic {
     5     //检测字母是否为字母
     6     public static boolean isAtoZ(char c){
     7         return c<='z'&&c>='A';
     8     }
     9     //检测字母是否为大写
    10     public static boolean isBig(char c){
    11         return c>='A'&&c<='Z';
    12     }
    13     //检测字母是否为小写
    14     public static boolean isSmall(char c){
    15         return c>='a'&&c<='z';
    16     }
    17     //转换字符的大小写
    18     public static char ChangeBigSmall(char c){
    19         if(CharBasic.isBig(c))
    20             return (char)(c+'a'-'A');
    21         else if(CharBasic.isSmall(c))
    22             return (char)(c+'A'-'a');
    23         else
    24             return '';
    25     }
    26     //int与char的"类型"转换
    27     public static char Changeintchar(int x){
    28         return (char)('0'+x);
    29     }
    30     public static int Changeintchar(char c){
    31         return (char)(c-'0');
    32     }
    33     //主方法
    34     public static void main(String[] args) {
    35         
    36     }
    37 }
     1 //如下是第一个程序的 CharManager.java 文件
     2 package src;
     3 
     4 public class CharManager {
     5     //字符
     6     private char cha;
     7     //次数
     8     private int num;
     9     //cha的set、get方法
    10     public void setcha(char chas){
    11         cha = chas;
    12     }
    13     public char getcha(){
    14         return cha;
    15     }
    16     //num的set、get方法
    17     public void setnum(int nums){dda
    18         num = nums;
    19     }
    20     public int getnum(){
    21         return num;
    22     }
    23     //num的++方法
    24     public void add(){
    25         num++;
    26     }
    27     public void add(int n){
    28         num = num + n;
    29     }
    30     //打印方法
    31     public void Print(){
    32         System.out.println(cha+"	"+num);
    33     }
    34     //构造方法
    35     public CharManager(){
    36         num = 0;
    37         cha = ' ';
    38     }
    39     public CharManager(char t){
    40         num = 0;
    41         cha = t;
    42     }
    43     public static void main(String[] args) {
    44         CharManager t = new CharManager('f');
    45         t.add();
    46         t.setcha('A');
    47     }
    48 }
      1 //如下是第一个程序的 CharDate.java 文件
      2 package src;
      3 
      4 import java.io.FileNotFoundException;
      5 import java.io.FileReader;
      6 import java.util.Scanner;
      7 
      8 public class CharDate {
      9     //============================================<数据域>=============================================//
     10     //字符数据库
     11     private CharManager []date = null;
     12     //确定长度
     13     private int length;
     14     //最大长度
     15     private int MaxSize;
     16     //============================================<方法域>=============================================//
     17     //基础设置方法
     18     public void SetLength(int l){
     19         length = l;
     20     }
     21     public int GetLength(){
     22         return length;
     23     }
     24     public void SetManger(int seat,char value,int times){
     25         date[seat].setcha(value);
     26         date[seat].setnum(times);
     27     }
     28     public void SetManger(int seat,CharManager a){
     29         date[seat].setcha(a.getcha());
     30         date[seat].setnum(a.getnum());
     31     }
     32     public CharManager GetManger(int seat){
     33         return date[seat];
     34     }
     35     //判断数据库内部是否已满
     36     public boolean isfull(){
     37         return length==MaxSize;
     38     }
     39     //判断数据库内部是否为空
     40     public boolean isempty(){
     41         return length==0;
     42     }
     43     //判断数据库内部是否含有c字符
     44     public boolean havethechar(char c){
     45         for(int i=0;i<length;++i)
     46             if(c==date[i].getcha())
     47                 return true;
     48         return false;
     49     }
     50     //返回数据库内部字符c的位置
     51     public int SearchSeat(char c){
     52         for(int i=0;i<length;++i)
     53             if(c==date[i].getcha())
     54                 return i;
     55         return -1;
     56     }
     57     //对新字母进行处理
     58     public void DealWithAtoZ(char c,boolean identifybigorsmall){
     59         if(CharBasic.isAtoZ(c))
     60         {
     61             if(!identifybigorsmall)
     62             {
     63                 if(havethechar(c))
     64                     date[SearchSeat(c)].add();
     65                 else if(havethechar(CharBasic.ChangeBigSmall(c)))
     66                     date[SearchSeat(CharBasic.ChangeBigSmall(c))].add();
     67                 else
     68                 {
     69                     if(length<MaxSize)
     70                     {
     71                         date[length].setcha(CharBasic.isSmall(c)?c:CharBasic.ChangeBigSmall(c));
     72                         date[length].setnum(1);
     73                         length++;
     74                     }
     75                     else
     76                     {
     77                         System.out.println("OverFlow!");
     78                         return;
     79                     }
     80                 }
     81             }
     82             else
     83             {
     84                 if(havethechar(c))
     85                     date[SearchSeat(c)].add();
     86                 else
     87                 {
     88                     if(length<MaxSize)
     89                     {
     90                         date[length].setcha(c);
     91                         date[length].setnum(1);
     92                         length++;
     93                     }
     94                     else
     95                     {
     96                         System.out.println("OverFlow!");
     97                         return;
     98                     }
     99                 }
    100             }
    101         }
    102         else
    103         {
    104             System.out.println("Not A to Z!");
    105             return;
    106         }
    107     }
    108     public void DealWithHavedAtoZ(char c,boolean identifybigorsmall){
    109         if(CharBasic.isAtoZ(c))
    110         {
    111             if(!identifybigorsmall)
    112             {
    113                 if(havethechar(c))
    114                     date[SearchSeat(c)].add();
    115                 else if(havethechar(CharBasic.ChangeBigSmall(c)))
    116                     date[SearchSeat(CharBasic.ChangeBigSmall(c))].add();
    117             }
    118             else
    119             {
    120                 date[SearchSeat(c)].add();
    121             }
    122         }
    123         else
    124         {
    125             System.out.println("Not A to Z!");
    126             return;
    127         }
    128     }
    129     //计算总数
    130     public int Sum(){
    131         int sum = 0;
    132         for(int i=0;i<length;i++)
    133             sum = sum + date[i].getnum();
    134         return sum;
    135     }
    136     //计算概率
    137     public double pointValue(int seat){
    138         return (double)date[seat].getnum()/(double)Sum();
    139     }
    140     //打印次数
    141     public void Printnum(int seat){
    142         System.out.println(date[seat].getcha()+" : "+date[seat].getnum());
    143     }
    144     public void Printnum(){
    145         for(int i=0;i<length;i++)
    146             System.out.println(date[i].getcha()+" : "+date[i].getnum());
    147     }
    148     //打印概率
    149     public void PrintpointValue(int seat){
    150         System.out.println(date[seat].getcha()+" : "+pointValue(seat)*100+"%");
    151     }
    152     public void PrintpointValue(){
    153         for(int i=0;i<length;i++)
    154             System.out.println(date[i].getcha()+" : "+pointValue(i)*100+"%");
    155     }
    156     //从文件导入
    157     public void BuildFromFile(String fileName){
    158         try {
    159             char []temp;
    160             Scanner sc = new Scanner(new FileReader(fileName));
    161             String string = sc.next();
    162             temp = string.toCharArray();
    163             for(int i=0;i<temp.length;i++)
    164                 DealWithHavedAtoZ(temp[i],true);
    165         } catch (FileNotFoundException e) {
    166             // TODO 自动生成的 catch 块
    167             e.printStackTrace();
    168         }
    169     }
    170     //构造方法
    171     public CharDate(){
    172         MaxSize = 0;
    173         length = 0;
    174         date = new CharManager [0];
    175     }
    176     public CharDate(int max){
    177         MaxSize = max;
    178         length = 0;
    179         date = new CharManager [max];
    180         for(int i=0;i<max;i++)
    181             date[i] = new CharManager();
    182     }
    183     public CharDate(boolean identifybigorsmall){
    184         if(identifybigorsmall)
    185         {
    186             MaxSize = 52;
    187             length = 52;
    188             date = new CharManager [52];
    189             for(int i=0;i<52;i++){
    190                 date[i] = new CharManager((char)((int)'A'+i));
    191             }
    192         }
    193         else
    194         {
    195             MaxSize = 26;
    196             length = 26;
    197             date = new CharManager [26];
    198             for(int i=0;i<26;i++){
    199                 date[i] = new CharManager((char)((int)'a'+i));
    200             }
    201         }
    202     }
    203     //主方法
    204     public static void main(String[] args) {
    205         CharDate cd = new CharDate(false);
    206         cd.BuildFromFile("files/save.txt");
    207         cd.Printnum();
    208     }
    209 }

        大致上就是如此,其中问题还是遇到了好多的!比如说一开始我没想大小写转化的情况,那个添加载入一个字符的方法,一开始只有判断一个字符是否存在,再然后就可以执行操作了,但实际上加入大小写不区分后,就需要多加一个参数 ifidentifybigorsmall(是否区分大小写),以及多了一重判断!再加上这个参数的判断,以及多加上操作——对两个字符的分别操作!

      再说说本来要做的程序吧!这个就比字符麻烦多了!......呃,其实...吧!也没麻烦多少啊!多加了几个方法,多了几个判断!差不多就写出来了!先说,说完我在展示我的代码!谈到这个String和char[]进行转换也遇到了一些小问题!首先就是那个方法String.toCharArray();这是将字符串大类转成字符数组的方法!利用String的辅助类StringBuffer类来完成一些操作,比如利用delete(0,1);来删除第一位置的字符,用insert(0,char x);来在字符的第一位置存入新的字符,这样就可以把首字母大写的字符串改过来,改成全小写的字符串!再者就是删除字符串的特殊字符——'.'、','、'“'、'-'等等英文语句内含有的标点符号!再者就是对数据库里的数据处理,找到出现频率排前N名的字符串,至于导出到文件里边就是小case啦!下面写我的代码:

      

     1 //如下是第二个程序的 StringBasic.java 文件
     2 package src;
     3 
     4 public class StringBasic {
     5     //输出
     6     public static void pr(String x){
     7         System.out.print(x);
     8     }
     9     //判断字符串是否为大写字母开头
    10     public static boolean isBigFirst(String str){
    11         char []br = str.toCharArray();
    12         if(br[0]>='A'&&br[0]<='Z')
    13             return true;
    14         else
    15             return false;
    16     }
    17     //判断字符串是否为大写字母开头
    18     public static boolean isSmallFirst(String str){
    19         char []br = str.toCharArray();
    20         if(br[0]>='a'&&br[0]<='z')
    21             return true;
    22         else
    23             return false;
    24     }
    25     //将字符串str的开头字符转为小写
    26     public static String ChangeToSmall(String str){
    27         StringBuffer sb = new StringBuffer(str);
    28         char s = sb.charAt(0);
    29         if(!StringBasic.isBigFirst(str))
    30             return "";
    31         sb.delete(0,1);
    32         s = (char)(s-'S'+'s');
    33         sb.insert(0,s);
    34         return sb.toString();
    35     }
    36     //字符串全转小写
    37     public static String ToSmall(String x){
    38         return x.toLowerCase();
    39     }
    40     //字符串全转大写
    41     public static String ToBig(String x){
    42         return x.toUpperCase();
    43     }
    44     //字符串删除标点符号
    45     public static String DeleteString(String x){
    46         x = x.replace(".","");
    47         x = x.replace(",","");
    48         x = x.replace("!","");
    49         x = x.replace("?","");
    50         x = x.replace(""","");
    51         x = x.replace("-","");
    52         return x;
    53     }
    54     //主方法
    55     public static void main(String[] args) {
    56         System.out.println("WaterMa--------te".dadad!?ffiuo"");
    57         System.out.println(DeleteString("WaterMate.dadad!?ffiuo""));
    58     }
    59 }
     1 //如下是第二个程序的 StringManager.java 文件
     2 package src;
     3 
     4 public class StringManager {
     5     //======================<数据域>=======================//
     6     //单词
     7     private String string;
     8     //出现次数
     9     private int num;
    10     //======================<方法域>=======================//
    11     //string的Set、Get方法
    12     public void setString(String str){
    13         string = str;
    14     }
    15     public String getString(){
    16         return string;
    17     }
    18     //num的Set、Get方法
    19     public void setNum(int nums){
    20         num = nums;
    21     }
    22     public int getNum(){
    23         return num;
    24     }
    25     //次数++
    26     public void add(){
    27         num++;
    28     }
    29     public void add(int n){
    30         num = num + n;
    31     }
    32     //打印方法
    33     public void Print(){
    34         System.out.println(string+" : "+num);
    35     }
    36     //构造方法
    37     public StringManager(){
    38         num = 0;
    39         string = null;
    40     }
    41     public StringManager(String str){
    42         num = 0;
    43         string = str;
    44     }
    45     public StringManager(String str,int times){
    46         num = times;
    47         string = str;
    48     }
    49     //主方法
    50     public static void main(String[] args) {
    51         
    52     }
    53 }
      1 //如下是第二个程序的 
      2 package src;
      3 
      4 import java.io.File;
      5 import java.io.FileNotFoundException;
      6 import java.io.FileReader;
      7 import java.io.FileWriter;
      8 import java.io.IOException;
      9 import java.io.PrintWriter;
     10 import java.util.Scanner;
     11 
     12 public class StringDate {
     13     //======================<数据域>=======================//
     14     //数据库
     15     private StringManager []date = null;
     16     //长度
     17     private int length;
     18     //最大容量
     19     private int MaxSize;
     20     //======================<方法域>=======================//
     21     //基础方法
     22     public void SetLength(int l){
     23         length = l;
     24     }
     25     public int GetLength(){
     26         return length;
     27     }
     28     public void SetDate(int seat,String str,int times){
     29         date[seat].setNum(times);
     30         date[seat].setString(str);
     31     }
     32     public void SetDate(int seat,StringManager a){
     33         date[seat].setNum(a.getNum());
     34         date[seat].setString(a.getString());
     35     }
     36     public StringManager GetDate(int seat){
     37         return date[seat];
     38     }
     39     //判断数据库内部是否已满
     40     public boolean isfull(){
     41         return length==MaxSize;
     42     }
     43     //判断数据库内部是否为空
     44     public boolean isempty(){
     45         return length==0;
     46     }
     47     //计算总数
     48     public int Sum(){
     49         int sum = 0;
     50         for(int i=0;i<length;i++)
     51             sum = sum + date[i].getNum();
     52         return sum;
     53     }
     54     //计算概率
     55     public double pointValue(int seat){
     56         return (double)date[seat].getNum()/(double)Sum();
     57     }
     58     //打印次数
     59     public void Printnum(int seat){
     60         System.out.println(date[seat].getString()+" : "+date[seat].getNum());
     61     }
     62     public void Printnum(){
     63         for(int i=0;i<length;i++)
     64             Printnum(i);
     65     }
     66     //打印概率
     67     public void PrintpointValue(int seat){
     68         System.out.println(date[seat].getString()+" : "+pointValue(seat)*100+"%");
     69     }
     70     public void PrintpointValue(){
     71         for(int i=0;i<length;i++)
     72             PrintpointValue(i);
     73     }
     74     //添加一个字符串
     75     public void AddString(String str){
     76         str = StringBasic.ToSmall(str);
     77         str = StringBasic.DeleteString(str);
     78         if(str.compareTo("")==0)
     79             return;
     80         else
     81         {
     82             if(HaveTheString(str))
     83             {
     84                 date[SearchString(str)].add();
     85             }
     86             else
     87             {
     88                 if(length==MaxSize)
     89                 {
     90                     System.out.println("OverFlow!");
     91                     return;
     92                 }
     93                 else
     94                 {
     95                     date[length].setNum(1);
     96                     date[length].setString(str);
     97                     length++;
     98                 }
     99             }
    100         }
    101     }
    102     //从数据库里寻找是否存在该字符串
    103     public boolean HaveTheString(String str){
    104         for(int i=0;i<length;i++)
    105             if(date[i].getString().compareTo(str)==0)
    106                 return true;
    107         return false;
    108     }
    109     //从数据库里寻找该字符串的位置
    110     public int SearchString(String str){
    111         for(int i=0;i<length;i++)
    112             if(date[i].getString().compareTo(str)==0)
    113                 return i;
    114         return -1;
    115     }
    116     //从文件里导入
    117     public void BuildFromFile(String fileName){
    118         try {
    119             Scanner sc = new Scanner (new FileReader(fileName));
    120             String str = sc.next();
    121             for(;str.compareTo("")!=0&&sc.hasNext();str = sc.next())
    122             {
    123                 AddString(str);
    124             }
    125         } catch (FileNotFoundException e) {
    126             // TODO 自动生成的 catch 块
    127             e.printStackTrace();
    128         }
    129     }
    130     //构造方法
    131     public StringDate(){
    132         MaxSize = 0;
    133         length = 0;
    134         date = new StringManager[0];
    135     }
    136     public StringDate(int max){
    137         MaxSize = max;
    138         length = 0;
    139         date = new StringManager[max];
    140         for(int i=0;i<max;i++)
    141             date[i] = new StringManager();
    142     }
    143     //打印前 N 名的次数
    144     public void PrintStringInNo(int N){
    145         String [] str = new String [N];
    146         int [] Number = new int [N];
    147         for(int i=0;i<N;i++)
    148             Number[i] = 0;
    149         for(int i=0;i<length;i++)
    150         {
    151             for(int k=0;k<N;k++)
    152                 if(date[i].getNum()>Number[k])
    153                 {
    154                     for(int j=N-1;j>k;j--)
    155                     {
    156                         Number[j] = Number[j-1];
    157                         str[j] = str [j-1];
    158                     }
    159                     str[k] = date[i].getString();
    160                     Number[k] = date[i].getNum();
    161                     break;
    162                 }
    163         }
    164         for(int i=0;i<N;i++)
    165             System.out.println(str[i]+" : "+Number[i]);
    166     }
    167     //打印前 N 名的次数
    168     public void PrintStringInNo(int N,String fileName){
    169         String [] str = new String [N];
    170         int [] Number = new int [N];
    171         for(int i=0;i<N;i++)
    172             Number[i] = 0;
    173         for(int i=0;i<length;i++)
    174         {
    175             for(int k=0;k<N;k++)
    176                 if(date[i].getNum()>Number[k])
    177                 {
    178                     for(int j=N-1;j>k;j--)
    179                     {
    180                         Number[j] = Number[j-1];
    181                         str[j] = str [j-1];
    182                     }
    183                     str[k] = date[i].getString();
    184                     Number[k] = date[i].getNum();
    185                     break;
    186                 }
    187         }
    188         File f = new File(fileName);
    189         if(!f.exists())
    190         {
    191             try {
    192                 f.createNewFile();
    193             } catch (IOException e) {
    194                 // TODO 自动生成的 catch 块
    195                 e.printStackTrace();
    196             }
    197         }
    198         try {
    199             PrintWriter pw = new PrintWriter(new FileWriter(fileName));
    200             for(int i=0;i<N;i++)
    201             {
    202                 pw.println(str[i]+" : "+Number[i]);
    203             }
    204             pw.close();
    205         } catch (IOException e) {
    206             // TODO 自动生成的 catch 块
    207             e.printStackTrace();
    208         }
    209     }
    210     //主方法
    211     public static void main(String[] args) {
    212         StringDate sd = new StringDate(10000);
    213         sd.BuildFromFile("files/Harry Potter.txt");
    214         sd.PrintStringInNo(5,"files/answer.txt");
    215     }
    216 }
    217 StringDate.java 文件

      

      

  • 相关阅读:
    Codeforces Round #297 (Div. 2) 525C Ilya and Sticks(脑洞)
    全栈必备 JavaScript基础
    2014-04-19编程之美初赛题目及答案解析
    doT js模板入门 2
    一篇关于arc下内存管理的老文章,包含各种冷门修饰符(关于内存),写的较好,mark
    MyBatis官方教程及源代码解析——mapper映射文件
    Android中图片的三级缓存策略
    python字符串/元组/列表/字典互转
    关于字节对齐的理解
    阿里云服务器ecs配置之安装redis服务
  • 原文地址:https://www.cnblogs.com/onepersonwholive/p/9774868.html
Copyright © 2020-2023  润新知