java遍历统计一个文件夹中所有文件单词出现次数

思路就是通过递归进行文件遍历,把所有文件夹中的非目录文件都遍历一遍,并判断其中读取到的字符串是不是单词,并对单词进行记录和计数,并在最后进行排序输出,下面是代码:

package word;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class word { static int[] num=new int[10000];//记录相应单词数量
   static String [] wor=new String[10000];//记录单词种类
static int numb=0;//单词种类个数
static double x=0;
static Scanner in;
static String s;
static Scanner input=new Scanner(System.in);
public static void main(String[] args) throws FileNotFoundException {
// TODO 自动生成的方法存根 int i=0,w=0; String s; String path = "C:\\file"; //要遍历的路径
File file = new File(path); //获取其file对象
fil(file); int[] re=new int[100000];//用于记录num[]中各个数字对应的单词在wor[]中的位置 int t;
for(i=0;i<numb;i++)
{
re[i]=i;
} for(i=0;i<numb;i++)
{
for(w=i;w<numb;w++)
{
if(num[i]<num[w]) {
t=num[i];
num[i]=num[w];
num[w]=t;
t=re[i];
re[i]=re[w];
re[w]=t; }
} }
for(i=1;i<numb;i++)
{
if(num[i-1]==num[i]) {
if(wor[re[i]].compareToIgnoreCase(wor[re[i-1]])<0) {
s=wor[re[i]];
wor[re[i]]=wor[re[i-1]];
wor[re[i-1]]=s;
w=num[i];
num[i]=num[i-1];
num[i-1]=w;
}
}
}
for(i=0;i<numb;i++)
{
System.out.println(wor[re[i]]+":"+num[i]); } }
public static void rest()
{
numb=0;x=0; }
public static void fil(File a) throws FileNotFoundException
{
String path =a.getPath();
File file = new File(path); //获取其file对象
File[] fs = file.listFiles(); //遍历path下的文件和目录,放在File数组中
for(File f:fs){ //遍历File[]数组
if(!f.isDirectory()) //若非目录(即文件),对其进行遍历
in=new Scanner(f);
else { fil(f); } while(in.hasNext())
{
s=in.next();
wordcheck(s); }}
}
public static void wordcheck(String s)
{ int i,w=1;
for(i=0;i<numb;i++)
{
if(s.equalsIgnoreCase(wor[i])) {w=0;
num[i]++;x++; break;}
}
if(w==1) {
Pattern pa = Pattern.compile("[a-zA-Z]+"); //利用正则表达式判断是不是单词
Matcher isNum = pa.matcher(s);
if (isNum.matches()) {
wor[numb]=s;
num[i]=1;
numb++;x++;
} } }
}
上一篇:vue element ui 导航刷新 is-active


下一篇:二维莫队(离线)