深圳同城快跑 上机试题02:从文本中读取内容,并统计不同英语单词出现的次数,最后输出到新的文本文件

package test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestTreeMap {
	public static void main(String[] args) throws IOException {
		String addr="E:/workspace/test/src/test/english.txt";
		BufferedReader bufr = new BufferedReader(new FileReader(addr));
		StringBuffer sbuf = new StringBuffer();// 缓冲字符串
		String line = null;
		while ((line = bufr.readLine()) != null) {
			sbuf.append(line);// 追加到缓冲字符串中
		}
		bufr.close();// 读取结束
		Pattern expression = Pattern.compile("[a-zA-Z]+");// 定义正则表达式匹配单词
		String str1 = sbuf.toString().toLowerCase();// 转换成小写
		Matcher matcher = expression.matcher(str1);// 定义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, count.intValue() + 1);
			} else {
				myTreeMap.put(word, new Integer(1));// 否则单词第一次出现,添加到映射中
			}
		}
		System.out.println("文章内容如下:");
		System.out.println(str1);
		System.out.println("统计分析如下:");
		System.out.println("文章中单词总数:" + n+"个");
		System.out.println("具体的信息在当前目录的result.txt文件中");
		BufferedWriter bufw=new BufferedWriter(new FileWriter("E:/workspace/test/src/test/result.txt"));
		Iterator iter=myTreeMap.keySet().iterator();//得到数映射集合的迭代器
		Object key=null;
		bufw.write("文件来自:"+addr+"内容如下:");
		bufw.write(sbuf.toString());
		bufw.newLine();
		while(iter.hasNext()){
			 key=iter.next();
			 System.out.println(key+":"+myTreeMap.get(key));
			 
			 bufw.write((String)key+":"+myTreeMap.get(key));
			 bufw.newLine();
		}
		bufw.write("统计分析如下:");
		bufw.write("文章中单词总数:" + n+"个");
		bufw.newLine();
		bufw.write("文章中不同单词总数:" + myTreeMap.size()+"个");
		bufw.close();
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值