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

Wesley13
• 阅读 464

日期: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 '\0';
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+"\t"+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 "\0";
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 文件
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这