zoukankan      html  css  js  c++  java
  • 计算最长英语单词链

    日期:2019.6.7

    博客期:101

    星期五

      

      经过了测试,我再一次的发现自己是有多么的菜鸡!唉~这么个破程序要写这么久,真是过分!我也是好久没写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
  • 相关阅读:
    python自动化测试框架的unittest与pytest前后置条件的区别
    XPTH定位总结
    自动化用例设计原则
    python 自动化测试框架unittest与pytest的区别
    Appium工作原理
    Fiddler抓包过滤
    monkey介绍及常用命令
    怎样安装python的 模块、 包、 库方法总结
    安装uiautomator2 + python 自动化环境
    APP自动化,怎样让应用不重置?
  • 原文地址:https://www.cnblogs.com/onepersonwholive/p/10987806.html
Copyright © 2011-2022 走看看