import
java.io.*;
public
class Account_num { public static
void main(String
args[]) {
int member[][],max=0,mid=0;
//member记录前10个单词的位置 int i,j,k,m,n;
int all=0,num[],num1=0,num2[],b=0,a=0,tmp11,tmp22;//num记录每层上单词的个数 member=new int[10][3];
char tmp1,tmp2,temp[];
//tmp用于从文件读取的中介,temp用于暂时记录每个单词 temp=new char[20]; for(i=0;i<20;i++)
temp[i]=‘\0‘; String words[][][];//words用于记录所有的单词; try{ FileInputStream f1=new FileInputStream("E:/Software_eng/a.txt");
tmp11=f1.read(); tmp22=f1.read(); while(tmp11!=-1) //第一遍读取,用于计算出总单词的个数
{tmp1=(char)tmp11; tmp2=(char)tmp22; /////////////// if(((tmp1>=‘a‘)&&(tmp1<=‘z‘))||((tmp1>=‘A‘)&&(tmp1<=‘Z‘))) { mid++; if((((tmp1>=‘a‘)&&(tmp1<=‘z‘))||((tmp1>=‘A‘)&&(tmp1<=‘Z‘)))&&!(((tmp2>=‘a‘)&&(tmp2<=‘z‘))||((tmp2>=‘A‘)&&(tmp2<=‘Z‘)))) { all++; if(mid>max)
{ max=mid; } mid=0;
} } tmp11=tmp22; tmp22=f1.read(); } f1.close();} catch(IOException ie){
System.out.println(ie); } num=new int[max]; num2=new int[max]; for(i=0;i<max;i++) { num2[i]=0;
num[i]=0;
} words=new String[max][][]; try{ FileInputStream f2=new FileInputStream("E:/Software_eng/a.txt");
tmp11=f2.read(); tmp22=f2.read(); mid=0;
while(tmp11!=-1)
//第二次读取用于计算每一层上的单词的个数 { tmp1=(char)tmp11; tmp2=(char)tmp22; if(((tmp1>=‘a‘)&&(tmp1<=‘z‘))||((tmp1>=‘A‘)&&(tmp1<=‘Z‘))) { mid++;
//用于记录中间每个单词的长度 } if((((tmp1>=‘a‘)&&(tmp1<=‘z‘))||((tmp1>=‘A‘)&&(tmp1<=‘Z‘)))&&!(((tmp2>=‘a‘)&&(tmp2<=‘z‘))||((tmp2>=‘A‘)&&(tmp2<=‘Z‘)))) { num[mid-1]++;
//相应的记录每层的长度的一维数组加一 mid=0;
//一个单词结束,记录长度的数置0 } tmp11=tmp22; tmp22=f2.read(); } f2.close(); } catch(IOException ie){
System.out.println(ie); } for(i=0;i<max;i++) { num1=num[i]; num2[i]=num[i];
//num2数组用于记录每层上的数组的个数,以便于后面的使用 words[i]=new String[num1][2];//对每一层上的二维数组进行空间的申请
} for(i=0;i<max;i++) { for(j=0;j<num[i];j++) { words[i][j][0]="1";
//用于记录该单词的个数, words[i][j][1]=null;
} } try{ FileInputStream f3=new FileInputStream("E:/Software_eng/a.txt");
tmp11=f3.read(); tmp22=f3.read(); mid=0;
//第三次读取用于吧所有的单词存储到申请好的空间里 while(tmp11!=-1)
{tmp1=(char)tmp11; tmp2=(char)tmp22; if((((tmp1>=‘a‘)&&(tmp1<=‘z‘))||((tmp1>=‘A‘)&&(tmp1<=‘Z‘)))) { temp[mid]=tmp1; //用于暂时保存读到的单词
mid++; } if((((tmp1>=‘a‘)&&(tmp1<=‘z‘))||((tmp1>=‘A‘)&&(tmp1<=‘Z‘)))&&!(((tmp2>=‘a‘)&&(tmp2<=‘z‘))||((tmp2>=‘A‘)&&(tmp2<=‘Z‘)))) { num1=num[mid-1]-1;
// num[mid-1]=num1;
words[mid-1][num1][1]=new String(temp);//将读到的单词放入相应的层地相应位置 words[mid-1][num1][1]=words[mid-1][num1][1].toLowerCase();//将单词转化为小写,便于后面的匹配 for(;mid>0;mid--) temp[mid-1]=‘\0‘;//将数组重新置为空
mid=0;
} tmp11=tmp22; tmp22=f3.read(); } f3.close(); } catch(IOException ie){
System.out.println(ie);
}
///////// for(i=0;i<10;i++) {
for(j=0;j<3;j++)
{member[i][j]=0;//将记录出现次数最多单词位置的数组全置为0,初始化。 } }
int
mid1=0; for(i=0;i<max;i++) { for(k=0;k<num2[i];k++) {mid=0;
if(!(words[i][k][0]=="0"))
{ for(j=k;j<num2[i];j++)
{ if(words[i][k][1].compareTo(words[i][j][1])==0) { mid++; if(mid!=1)
//如果遇到相等的单词就个数加一 words[i][j][0]=""+0+""; } } words[i][k][0]=""+mid+""; if(mid>member[9][2])
//如果当前单词的出现次数大于已储存的 {
//最小的单词次数,就提换掉最小的, member[9][0]=i;
//在此声明member数组是用于存储当前出现次数 member[9][1]=k;
//最多的单词在三维数组中的位置。 member[9][2]=mid;
//顺续是按从大到小的顺序排的 for(n=0;n<9;n++)
//然后是循环找到当前出现次数在已记录的 {
//次数中的位置 if(member[9-n][2]>member[9-n-1][2]) { m=member[9-n][0]; member[9-n][0]=member[9-n-1][0]; member[9-n-1][0]=m; m=member[9-n][1]; member[9-n][1]=member[9-n-1][1]; member[9-n-1][1]=m; m=member[9-n][2]; member[9-n][2]=member[9-n-1][2]; member[9-n-1][2]=m; } } } /////////////////////////// } } } System.out.println(member[0][2]); System.out.println("出现频率最高的10个单词为:");
for(i=0;i<10;i++)
{ a=member[i][0];
//根据记录的位置输出单词 b=member[i][1]; System.out.println(a); System.out.println(b); System.out.println(words[a][b][1]); } }
}原文:http://www.cnblogs.com/shaoh98521/p/3603941.html