package world;
public class word {
String value; //具体的单词
int ge; //出现的个数
word next; //将单词链起来
public word(String value,int geshu) //带参构造函数
{
this.value=value;
this.ge=geshu;
next=null;
}
public word() //空构造函数
{
this.value="";
this.ge=0;
next=null;
}
}
package world;
import java.io.FileReader;
import java.io.IOException;
public class r {public static void main(String args[]) throws IOException //主函数
{
word word=new word(); //单词的链头
word lian,xin;
String str="";
@SuppressWarnings("resource")
FileReader f=new FileReader("D:/Test.txt"); //读取英文文件
char[] c=new char[1]; //每次读取一个字母
boolean exist=false; //判断单词是否存在于 word 链中
while((f.read(c))!=-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.ge++;
exist=true;break;
}
else
{
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);
}
}
// 循环5次
for(int i=1;i<=5;i++)
{
xin=new word("",0);
lian=word.next;
//找到单词链中个数最多的
while(lian!=null)
{
if(lian.ge>xin.ge)
{
xin=lian;
}
lian=lian.next;
}
//输出单词链中个数最多的
System.out.println("第"+i+"个 :"+xin.value+"个数:"+xin.ge);
lian=word;
//删除单词链中单词个数最多的
while(lian.next!=null)
{
if(lian.next.value.equalsIgnoreCase(xin.value))
{
lian.next=lian.next.next;
break;
}
lian=lian.next;
}
}
}
}
从百度上借鉴了一下,不是太清楚,
思想
首先建立一个文件,文件读取,运用链表,按字符读取,当遇到换行,空格,符号做为一个单词,遍历链表统计单词数量并输出数量最多的五个,输出。