计算最长英语单词链
问题如下:
大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,
快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。最长的定义是:最多单词数量,和单词中字母的数量无关。
统一输入文件名称:input1.txt, input2.txt
统一输出文件名称:output1.txt,output2.txt
程序需要考虑下列异常状况:
例如,文件不存在,你的程序会崩溃么,还是能优雅地退出并给用户提示信息?
如果文件没有任何单词、只有一个单词、没有可以首尾相连的单词,程序应该如何输出?
如果输入文件有一万个单词,你的程序能多快输出结果?
1 import java.io.*; 2 import java.text.*; 3 import java.util.*; 4 public class Text_2 { 5 static int N=5; 6 static String b[]=new String[500]; 7 public static void main(String[] args) 8 { 9 10 String sz=writeFromFile.readTxtFile("input2.txt"); 11 String ltxt=null; 12 if(sz==null) 13 { 14 System.out.println("找不到指定的文件"); 15 } 16 else if(sz=="kong") 17 { 18 System.out.println("文件为空!"); 19 } 20 21 else 22 { 23 System.out.println(ltxt=StatList1(sz)); 24 25 select(b); 26 } 27 28 try { 29 writeFromFile.daochu(ltxt); 30 } catch (IOException e) { 31 // TODO Auto-generated catch block 32 e.printStackTrace(); 33 } 34 35 36 37 } 38 public static int woor(String a) 39 { 40 int n=0; 41 File ctoFile = new File("stopword.txt"); 42 InputStreamReader rdCto; 43 try { 44 rdCto = new InputStreamReader(new FileInputStream(ctoFile)); 45 BufferedReader bfReader = new BufferedReader(rdCto); 46 String txtline = null; 47 try { 48 while ((txtline = bfReader.readLine()) != null) 49 { 50 if(txtline.equals(a)) 51 { 52 n=1; 53 } 54 } 55 bfReader.close(); 56 } catch (IOException e) { 57 // TODO Auto-generated catch block 58 e.printStackTrace(); 59 } 60 61 } catch (FileNotFoundException e) { 62 // TODO Auto-generated catch block 63 e.printStackTrace(); 64 } 65 return n; 66 } 67 public static ArrayList<String> getFiles(String path) { 68 ArrayList<String> files = new ArrayList<String>(); 69 File file = new File(path); 70 File[] tempList = file.listFiles(); 71 for (int i = 0; i < tempList.length; i++) { 72 if (tempList[i].isFile()) { 73 files.add(tempList[i].toString()); 74 } 75 if (tempList[i].isDirectory()) { 76 } 77 } 78 return files; 79 } 80 public static String StatList1(String str) { 81 StringBuffer sb = new StringBuffer(); 82 HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打开一个哈希表 83 String[] slist = str.split("[^a-zA-Z\']+"); 84 for (int i = 0; i < slist.length; i++) 85 { 86 if (!has.containsKey(slist[i])) 87 { 88 has.put(slist[i], 1); 89 } 90 else 91 { 92 has.put(slist[i],has.get(slist[i])+1 ); 93 } 94 } 95 Iterator<String> iterator = has.keySet().iterator(); 96 String a[]=new String[500]; 97 int s[]=new int[500]; 98 int judge; 99 int n=400; 100 for(int i=0;i<n;i++) 101 { 102 iterator = has.keySet().iterator(); 103 while(iterator.hasNext()) 104 { 105 String word = (String) iterator.next(); 106 if(s[i]<has.get(word)) 107 { 108 s[i]=has.get(word); 109 a[i]=word; 110 b[i]=word; 111 } 112 } 113 judge=woor(a[i]); 114 if(judge==1) 115 { 116 n++; 117 has.remove(a[i]); 118 } 119 else 120 { 121 // System.out.println(a[i]+"6666"); 122 // sb.append("单词:").append(a[i]).append(" 次数").append(has.get(a[i])).append("\r\n"); 123 has.remove(a[i]); 124 } 125 } 126 return sb.toString(); 127 } 128 public static void select(String b[]) 129 { 130 List<Object> list=new ArrayList<>(); 131 int q=0; 132 int n0=0; 133 for(int i=0;i<b.length;i++) 134 { 135 if(b[i]!=null) 136 { 137 n0++; 138 } 139 } 140 if(n0==1) 141 { 142 System.out.println("只有一个单词"); 143 } 144 else 145 { 146 String c="and"; 147 q=c.length(); 148 char n1=c.charAt(0); 149 char n2=c.charAt(q-1); 150 list.add(c); 151 for(int j=0;j<b.length;j++) 152 { 153 String w=b[j]; 154 if(w!=null) 155 { 156 int e=w.length(); 157 char n3=w.charAt(0); 158 char n4=w.charAt(e-1); 159 if(n2==n3) 160 { 161 list.add(w); 162 n1=n3; 163 n2=n4; 164 } 165 } 166 167 } 168 String l=null; 169 //优雅退出 170 if(list.size()==1) 171 { 172 System.out.println("没有首尾相连"); 173 } 174 else 175 { 176 for(int i=0;i<list.size();i++) 177 { 178 l=l+list.get(i)+"->"; 179 System.out.println(list.get(i)+"->"); 180 } 181 try { 182 daochu(l); 183 } catch (IOException e) { 184 // TODO Auto-generated catch block 185 e.printStackTrace(); 186 } 187 } 188 } 189 190 191 } 192 public static void daochu(String a) throws IOException 193 { 194 File file =new File("output1.txt"); 195 Writer out =new FileWriter(file); 196 String data=a; 197 out.write(data); 198 out.close(); 199 200 } 201 202 203 204 205 206 207 }