在一次考试中的一题java编程题
题目:查找一个目录下(包括子目录)的txt文件,统计txt文件里面每个单词出现的个数(以空格区分单词)
我的编程思路:1、搜索目录下所有文件(递归算法)
2、判断文件是否.txt
3、读取.txt文件,获取.txt文件里面的字符,采用split取出每个单词统计单词个数
程序花了2个多小时,呵呵,以后还待提高!!
程序还不够完善,例如:如果遇到中文问题、单词换行了等问题还有待解决。
package com.tencent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* 题目:查找一个目录下(包括子目录)的txt文件,统计txt文件里面每个单词出现的个数(以空格区分单词)
* 思路:
* 1、搜索目录下所有文件(递归算法)
* 2、判断文件是否.txt
* 3、读取.txt文件,获取.txt文件里面的单词,统计单词个数
*
* @author sam
*
*/
public class SearchTextOfWord {
private final static String directory = "E:\\";
//将单词存储在Map里面(key存储单词 value存储单词的个数)
private Map<String, Integer> worlds = new HashMap<String, Integer>();
//1、收集目录下所有txt文件(递归算法)
public void getAllTxt(String directory) throws Exception {
File file = new File(directory);
if(file.canRead()) {
File[] files = file.listFiles();
for(int i=0; i<files.length; i++) {
if(files[i].isDirectory()) {
getAllTxt(files[i].getAbsolutePath());
} else {
String fileName = files[i].getName();
String fileType = "";
int index = fileName.indexOf(".");
if(index != -1) {
fileType = fileName.substring(index);
}
if(fileType.equals(".txt")) {
System.out.println(files[i].getAbsolutePath());
readTxt(files[i].getAbsolutePath());
}
}
}
}
}
//2、对每个txt文件进行迭代,读取每个txt文件
public void readTxt(String txtDir) throws Exception {
BufferedReader br = new BufferedReader(new FileReader(txtDir));
String line = br.readLine();
while(line != null) {
findWorld(line);
line = br.readLine();
}
}
//解决多空格造成的错误
public void findWorld(String world) {
String[] worlds = null;
if(world != null && !world.equals("") && !world.equals(" ")) {
worlds = world.split(" ");
if(worlds.length == 1) {
updateWorld(worlds[0]);
return;
}
for(int i=0; i<worlds.length; i++) {
findWorld(worlds[i]);
}
}
}
//3、统计单词的个数
public void updateWorld(String world) {
if(worlds.get(world) == null) {
worlds.put(world, new Integer(1));
} else {
int num = worlds.get(world);
worlds.put(world, new Integer(num + 1));
}
}
public static void main(String[] args) {
SearchTextOfWorld stw = new SearchTextOfWorld();
try {
stw.getAllTxt(directory);
Iterator it = stw.worlds.entrySet().iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
System.out.println(entry.getKey() + "->" + entry.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

浙公网安备 33010602011771号