public class englishTest {
public static void main(String args[]) throws IOException {
BufferedReader buf= new BufferedReader(
new FileReader("d:/english.txt"));
BufferedWriter bufw= new BufferedWriter(
new FileWriter("d:/result.txt"));
StringBuffer sbuf = new StringBuffer();// 缓冲字符串
String line = null;
while ((line = buf.readLine()) != null) {
sbuf.append(line);
sbuf.append(" ");// 追加到缓冲字符串中
if (!line.isEmpty()) {// 去文本空行
bufw.newLine();
bufw.write(line);
}
}
buf.close();// 读取结束
String string1 = sbuf.toString().toLowerCase();// 转换成小写
Pattern expression = Pattern.compile("[a-zA-Z]+");// 定义正则表达式匹配单词
Matchermatcher = expression.matcher(string1);// 定义string1的匹配器
TreeMap myTreeMap = new TreeMap();// 创建树映射 存放键/值对
int n = 0;// 文章中单词总数
Object word = null;// 文章中的单词
Object num = null;// 出现的次数
while (matcher.find()) {// 是否匹配单词
word = matcher.group();// 得到一个单词-树映射的键
n++;// 单词数加1
if (myTreeMap.containsKey(word)) {// 如果包含该键,单词出现过
num = myTreeMap.get(word);// 得到单词出现的次数
Integer count = (Integer) num;// 强制转化
myTreeMap.put(word, new Integer(count.intValue() + 1));
} else {
myTreeMap.put(word, new Integer(1));// 否则单词第一次出现,添加到映射中
}
}
System.out.println("统计分析如下:");
System.out.println("文章中单词总数" + n + "个");
System.out.println("具体的信息在当前目录的result.txt文件中");
Iteratoriter = myTreeMap.keySet().iterator();// 得到树映射键集合的迭代器
Object key = null;
while (iter.hasNext()) {// 使用迭代器遍历树映射的键
key = iter.next();
bufw.write((String) key + ":" + myTreeMap.get(key));// 键/值写到文件中
bufw.newLine();
System.out.println((String) key + ":" + myTreeMap.get(key));
}
bufw.write("english.txt中的单词总数" + n + "个");
bufw.newLine();
bufw.write("english.txt中不同单词" + myTreeMap.size() + "个");
bufw.close();
}
}
总结:
这个程序包含了文本文件统计单词个数及去掉空行的方法…………
涵盖了 java正则表达(pattern类及matcher类)的用法 、Treemap、迭代器(iterater)、字符流写入写出等基础知识的用法
再列出个pattern类的小用法:
public class patternPractice {
private static final String REGEX = ":";
private static final String INPUT = "one:two:three:four:five";
public static void main(String[] args) throws IOException {
Pattern expression = Pattern.compile(REGEX);
String[] items = expression.split(INPUT);
int n = 0;
for (String s : items) {
System.out.println(s);
n++;
System.out.println(n);
}
}
}