计算最长英语单词链

日期:2019.6.7

博客期:085

星期五

  

  经过了测试,我再一次的发现自己是有多么的菜鸡!唉~这么个破程序要写这么久,真是过分!我也是好久没写Java程序,手生了!

  好了,说程序,这一个程序的最大限度是在文件的单词数不超过Integer的MAX值个,就可以运行了,也就是说大约24000000个单词,我测试的文件是1200000多行,直接报内存溢出了,我也明白是怎么回事!给大家看看我的代码。

  代码上有注释,大家应该都看得懂!

  

 1 package basic;
 2
 3 import java.io.File;
 4 import java.io.PrintWriter;
 5 import java.util.ArrayList;
 6 import java.util.List;
 7 import java.util.Scanner;
 8
 9 public class FileReaderToMakeGroup {
10     //把最长的结果输出到文件中
11     public static void makeListIntoFiles(List<String>list,String file){
12         File f = new File(file);
13         try {
14             if(!f.exists())
15             {
16                 System.out.println("输出文件不存在!");
17                 f.createNewFile();
18             }
19             PrintWriter pw = new PrintWriter(f);
20
21             int leng = list.size();
22
23             for(int i=0;i<leng;++i)
24             {
25                 String str = list.get(i);
26                 if(str.charAt(str.length()-1)==‘-‘||str.charAt(str.length()-1)==‘—‘)
27                     str = str.substring(0,str.length()-1);
28                 pw.println(str);
29             }
30
31             pw.close();
32         } catch (Exception e) {
33             return;
34         }
35     }
36     //处理输入文件,将处理的文件导入成单词数组
37     public static List <String> makeDealWith(String file){
38
39         List <String> list = new ArrayList<String>();            //要返回的数组
40         File f = new File(file);
41         Scanner sc = null;
42         try {
43             if(!f.exists())
44                 f.createNewFile();                                //文件不存在,进行处理
45             sc = new Scanner(f);
46             while(sc.hasNext())
47             {
48                 String s = sc.next().toLowerCase();                //将单词字符串转为小写
49
50                 if(isContainsUnableChar(s))                        //判断有特殊字符,将特殊字符去掉
51                     s = dealAndGetSpecific(s);
52
53                 if(s.compareTo("")==0)                            //如果删除后就只有空字符串了
54                     continue;
55
56                 /*
57                 if(!listContain(list,s))                        //如果字符串重复了
58                     list.add(s);
59                 */
60
61                 if(s.charAt(s.length()-1)==‘-‘)                    //去掉末尾是-的情况
62                     s.replace("-","");
63             }
64         } catch (Exception e) {
65             System.out.println("输入文件不存在!");
66             return list;
67         }
68         sc.close();
69         return list;
70     }
71     //展示文件的内容到页面
72     public static void makeFileIntoView(List<String>list){
73         int leng = list.size();
74         for(int i=0;i<leng;++i)
75             System.out.println(list.get(i));
76     }
77     //判断是否为含有非单词字符
78     public static boolean isContainsUnableChar(String str){
79         return str.contains(",")||str.contains(".")||str.contains("?")||str.contains(";")||str.contains(":")||str.contains("”")||str.contains("!")||str.contains("“")||str.contains("’")||str.contains("‘");
80     }
81     //将非单词字符删掉
82     public static String dealAndGetSpecific(String str){
83         return str.replace(",","").replace(".","").replace(";","").replace("?","").replace(":","").replace("!","").replace("”","").replace("“","").replace("’","").replace("‘","");
84     }
85     //判断表内是否存在str
86     public static boolean listContain(List <String> list_str,String str){
87         if(list_str==null||str==null)
88             return false;
89         else if(list_str.size()==0||str.length()==0)
90             return false;
91         int leng = list_str.size();
92         for(int i=0;i<leng;++i)
93             if(list_str.get(i).compareTo(str)==0)
94                 return true;
95         return false;
96     }
97 }

FileReaderToMakeGroup.java

 1 package basic;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 public class TestForMainInString {
 7     //对于相应的文件做处理
 8     public static void makeOutputInputFiles(String inputFile,String outputFile){
 9
10         List <String> final_list = new ArrayList<String>();
11
12         List <String> list = FileReaderToMakeGroup.makeDealWith(inputFile);
13
14         //FileReaderToMakeGroup.makeFileIntoView(list);
15
16         int leng = list.size();
17
18         if(leng==0)
19         {
20             System.out.println("输入文件为空!");
21             return;
22         }
23         else if(leng==1)
24             System.out.println("只有一个单词!");
25
26         boolean [] hasUsed = new boolean [leng];    //记录是否被编辑
27
28         for(int i=0;i<leng-final_list.size();++i)    //循环做减法——直至不能再有更长的内容出现
29         {
30             hasUsed[i] = false;
31         }
32
33         for(int i=0;i<leng;++i)
34         {
35             if(!hasUsed[i])
36             {
37                 hasUsed[i] = true;
38                 List <String> plist = new ArrayList<String>();                //存储以当前开头的所有首尾相连的最大字符串组合
39
40                 char c;
41
42                 if(list.get(i).length()!=0)
43                     c = list.get(i).charAt(list.get(i).length()-1);            //对初始字符进行判定
44                 else
45                     continue;
46
47                 plist.add(list.get(i));
48
49                 for(int j=i+1;j<leng;++j)
50                 {
51                     String pstr = list.get(j);
52                     if(pstr.length()!=0)
53                     {
54                         //如果字符串符合要求且不重复就做规整
55                         if(c==pstr.charAt(0)&&!FileReaderToMakeGroup.listContain(plist, pstr))
56                         {
57                             plist.add(pstr);
58                             c = pstr.charAt(pstr.length()-1);
59                             hasUsed[j] = true;
60                         }
61                     }
62                 }
63                 if(plist.size()>=final_list.size())                    //找寻长度最长的词语接龙
64                     final_list = plist;
65             }
66         }
67
68         FileReaderToMakeGroup.makeListIntoFiles(final_list, outputFile);        //把文件写入到outputFile下
69
70         if(leng!=0&&final_list.size()==1)
71         {
72             System.out.println("没有首尾相连的单词!");        //判定没有首尾相连的单词
73         }
74
75         //FileReaderToMakeGroup.makeListIntoFiles(list, "txtFiles/output3.txt");
76     }
77     public static void main(String[] args) {
78         String inputFileName = "txtFiles/input3.txt";
79         String outputFileName = "txtFiles/output4.txt";
80         makeOutputInputFiles(inputFileName,outputFileName);
81     }
82 }

TestForMainInString.java

原文地址:https://www.cnblogs.com/onepersonwholive/p/10987806.html

时间: 2024-10-30 11:03:59

计算最长英语单词链的相关文章

课堂测验-计算最长英语单词链

设计思想:先将单词都从文本中找出来,然后再建立两个数组,第一个放每一个单词的首字母,第二个放每一个单词的尾字母,然后根据这两个是否相同,放进一个int数组中,调出来,就可以 代码实现: 1 package txt读入; 2 3 import java.io.BufferedWriter; 4 import java.io.File; 5 import java.io.FileReader; 6 import java.io.FileWriter; 7 import java.io.IOExcep

成语接龙(英语单词链)

<构建之法>练习题 大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次.最长的定义是:最多单词数量,和单词中字母的数量无关. 例如, 文件里有: Apple Zoo Elephant Under Fox Dog Moon Leaf Tree Pseudopseudohypoparathyroidism   最长的相连英语单词串为:  apple - elephant – tre

【北航软件工程】最长单词链

Part.1 github链接 Part.2 PSP2.1 Personal Software Process Stages 预计耗时(分钟) 实际耗时(分钟) Planning 计划 15 10 PSP2.1 估计这个任务需要多少时间 15 10 Development 计划 1120 1360 · Analysis 需求分析 (包括学习新技术) 120 150 · Design Spec 生成设计文档 30 30 · Design Review 设计文档复审 10 10 · Coding S

48个国际英语音标发音表与英语单词的偏旁部首

英语48个国际音标表 元音 20个 单元音 前元音 [i?](一拖长) [?](一) [e] [æ] 中元音 [??](厄拖长) [?]( 厄) [?](啊) 后元音 [u?](屋拖长) [?]( 屋) [??](凹拖长) [?](凹) [ɑ?](啊拖长) 双元音 开合双元音 [e?](A) [a?](爱) [??]( 凹一) [a?](阿-屋) [??]( 欧) 集中双元音 [??](一厄) [e?]( 哀-厄) [??]( 屋-厄) 辅音 28个 爆破音 清辅音 [p] [t] [k] 浊辅

【C】字符串的输入,求输入字符串中最长的单词

首先,基本目标很简单,就是利用C语言:编写一个函数,输入一行字符,将此行字符中的最长的单词输出. 代码如下: #include<stdio.h> void input(char s[]){ int i=0; for(int c;(c=getchar())!='\n';i++){ s[i]=c; } s[i]='\0';//读取完成,记得对这个字符数组封口 } char* findmax(char s[]){ int max=0,word_length=0,p=0,i=0;//这个p是用来记录最

谭浩强 C程序设计 8.10写一函数,输入一行字符,将此字符串中最长的单词输出。

代码量稍微一大,就会出现bug,浪费很多时间,继续努力. #include <stdio.h> void main(){ void maxLen(char str[50]); char str[50]; gets(str); maxLen(str); } void maxLen(char str[50]){ int i,j=1,t=-1,start=0,m; int maxNum(int num[50]); int num[50]={0}; num[0]=-1;//num[1]放第一个单词的长

草滩小恪与英语单词--弱爆的小程序

草滩小恪一直为如何学习英语而苦恼, 特别是单词的记忆.临近考试啦,草滩小恪想恶补一下英语单词, 但是草滩小恪又是very lazy 所以 草滩小恪就找到了草滩大学的历年英语考试卷, 想背一下 阅读 里面出现的高频词汇.草滩小恪认为这idea真TM太机智啦!!!. 但是, 很快草滩小恪就发现, 寻找短文里面的高频词汇真TN的不是人能干的事.那么问题来啦, 咋办呢? 机智的读者想必早已知道了咋办. 是的, 就是这么办的. 程序说明: 主要功能: 统计一篇英语文章里的高频词汇 附加功能:练习拼写这些高

统计语句中的最长最短单词

已知 string sentence="We were her pride of 10 she named us: Benjamin, Phoenix, the Pordigal and perspicacious pacific Suzanne.";编写程序,计算sentence中有多少个单次,并指出其中最长和最短的单词,如果有多个,则将它们全部输出 使用find_first_of 和find_first_not_of,寻找到单词的起始位置: 使用vector存放最长和最短单词:通过

利用word分词提供的文本相似度算法来辅助记忆英语单词

本文实现代码:利用word分词提供的文本相似度算法来辅助记忆英语单词 本文使用的英语单词囊括了几乎所有的考纲词汇共18123词: /**  * 考纲词汇  * @return  */ public static Set<Word> getSyllabusVocabulary(){     return get("/word_primary_school.txt",             "/word_junior_school.txt",