题目:大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次。最长的定义是:最多单词数量,和单词中字母的数量无关。统一输入文件名称:input1.txt, input2.tx统一输出文件名称:output1.txt,output2.txt。程序需要考虑下列异常状况:例如,文件不存在,你的程序会崩溃么,还是能优雅地退出并给用户提示信息?如果文件没有任何单词、只有一个单词、没有可以首尾相连的单词,程序应该如何输出?如果输入文件有一万个单词,你的程序能多快输出结果?
import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException; public class Max {public static void main(String[] args)throws IOException { Word word=new Word(); //单词的链头 Word lian,xin; String str=""; File f1=new File("D:\\text.txt"); if(!f1.exists()) { System.out.println("文件不存在"); } else {FileReader f=new FileReader("D:\\text.txt"); //读取英文文件 char[] c=new char[1]; //每次读取一个字母 int b=0; boolean exist=false; //判断单词是否存在于 word 链中 BufferedWriter writer2 = new BufferedWriter(new FileWriter(new File("D:\\result.txt"),true)); File writeName=new File("D:\\result.txt"); String S1=""; String S2=""; writeName.createNewFile(); int num1=0; int num2=0; int[] Num1=new int[1000000]; int[] Num2=new int[1000000]; while((b=f.read(c))!=-1) //每次读取一个字母直到最后 { int i1=1; //如果字符为 换行、空格、单引号、双引号、逗号、句号 则为一个单词的结束及另一个单词的开始 if(String.valueOf(c).equals("\r")||String.valueOf(c).equals("\n")||String.valueOf(c).equals(" ")||String.valueOf(c).equals(",")||String.valueOf(c).equals(".")||String.valueOf(c).equals("\"")||String.valueOf(c).equals("'")) { lian=word; while(lian!=null) { if(lian.value.equalsIgnoreCase(str)) //如果单词在单词链中存在,则单词个数++ { lian.geshu++;exist=true;break; } else { if(i1==1) { Num1[num1]=num1; String ss=str.substring(0, 1); S1=S1+ss; num1=num1+1; } if(i1==1) { Num2[num2]=num2; String ss=str.substring(str.length()-1, str.length()); S2=S2+ss; num2=num2+1; } i1=i1+1; lian=lian.next; } } if(exist==false) //如果不存在,则在单词链中添加 { xin=new Word(str,1); xin.next=word.next; word.next=xin; str=""; } else { exist=false; str=""; } } else //单词 { str+=String.valueOf(c); } } if(num1==1) { System.out.println("只有一个单词"); } else { if(num1==0) { System.out.println("没有单词"); } else { System.out.println(S1); System.out.println(S2); System.out.println(num1); for(int im=0;im
建立两个字符串数组,一个放每一个单词的首字母,另一个放每一个单词的尾字母;
然后根据这两个是否相同,放进一个int数组中。