设计思路:
这个问题,首先要找出每个单词的首尾字母,通过判断首尾相同的字母连接在一起;
如何存每个单词的首尾字母?这里借鉴同学的方法:建立两个字符串数组,一个放每一个单词的首字母,另一个放每一个单词的尾字母;
然后根据这两个是否相同,放进一个int数组中
源代码:
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(" ")||String.valueOf(c).equals(" ")||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<num1;im++)
{
String s1=S1.substring(im, im+1);
int ii=1;
for(int in=0;in<num1;in++)
{
String s2=S2.substring(in, in+1);
int n1=Num1[im];
int n2=Num2[im];
if(!s1.equals(s2))
{
System.out.println("没有首尾相连单词");
}
if(s1.equals(s2))
{
int N=20;
for(int i=1;i<=10;i++)
{
xin=new Word("",0);
lian=word.next;
//找到单词链中个数最多的
while(lian!=null)
{
xin=lian;
lian=lian.next;
}
int m=n1-1;
if(i==n1-1)
{
System.out.println("第"+i+"个 :"+xin.value+"个数:"+xin.geshu);
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(new File("D:\result.txt"),true));
writer.write(" "+xin.value);
writer.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
lian=word;
//删除单词链中单词个数最多的
while(lian.next!=null)
{
if(lian.next.value.equalsIgnoreCase(xin.value))
{
lian.next=lian.next.next;
break;
}
lian=lian.next;
}
}
}
}
ii=ii+1;
}
}
}
}
}
}