思路
- 1.设置一个全局表来存放每一个出现过的单词和它的出现次数
- 2.遍历所有文件,根据文件类型来判断是不是我们想要读取的文件
- 3.读取文件内容
- 4.把文件内容分割成一个个单词,并将文件中出现的单词,以及出现的次数存到全局表中
- 5.根据出现次数从大到小排序数据
- 6.打印出结果
实现
1.设置一个全局表来存放每一个出现过的单词和它的出现次数
这里用TreeMap方便我们排序
private static Map<String, Integer> table=new TreeMap<String, Integer>();
2.遍历所有文件,根据文件类型来判断是不是我们想要读取的文件
通过递归遍历目录下的所有文件,我们只读取c,cpp,java为后缀的文件。
private static void statisticDir(File dir) {
if(dir.isFile()) {
return;
}
File[] fs=dir.listFiles();
if(fs==null) {
return;
}
for (File f:fs)
{
if (f.isFile())
{
String full=f.getAbsolutePath();
if(full.endsWith(".c")||full.endsWith(".cpp")||full.endsWith(".java")) {
statisticFile(full);
}
}
else{
System.out.println("扫描:"+f.getAbsolutePath());//想快点可以把这行注释掉
statisticDir(f);
}
}
}
3.读取文件内容
private static StringBuilder readFile(String file) {
BufferedReader bufferedReader=null;
StringBuilder stringBuilder=new StringBuilder();
try {
bufferedReader=new BufferedReader(new FileReader(file));
String line=null;
while ((line=bufferedReader.readLine())!=null) {
stringBuilder.append(line+"\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
if(bufferedReader!=null) {
try {
bufferedReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return stringBuilder;
}
4.把文件内容分割成一个个单词,并将文件中出现的单词,以及出现的次数存到全局表中
这里将忽略单个字母的单词,支持大驼峰和小驼峰命名的单词组合拆分,例如:void setName(name);
或者void SetName(Name);
将被分解成4个单词。
private static void statisticWordsBySentence(String sentence){
int start=0;
int end=0;
String wo