在一次考试中的一题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(); } } }