




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、import java.awt.List;import java.io.*;import jxl.*;import jxl.write.*;import java.text.DecimalFormat;import java.util.ArrayList;public class statistics public static void main(String args) / 读字表ArrayList chtable = readFromTable("CHTable.txt");System.out.println("字表大小为:" + chtable
2、.size();/ 读文件ArrayList numlist = readFromFile("10.txt", chtable);/ 排序ArrayList chlist = sort(chtable, numlist);/ 计算汉字的总数int sum = 0;for (int i = 0; i < numlist.size(); i+) sum = sum + (Integer) numlist.get(i);System.out.println("-显示结果-");/ 返回指定个数的汉字频率统计结果ArrayList freqlist = f
3、requency(chlist, numlist, sum, 100);/ 计算熵值float sh = entropy(freqlist);/ 计算指定个汉字的字频总和float fre1 = freqSum(freqlist, 1);float fre2 = freqSum(freqlist, 20);float fre3 = freqSum(freqlist, 100);float fre4 = freqSum(freqlist, 600);float fre5 = freqSum(freqlist, 2000);float fre6 = freqSum(freqlist, 3000);
4、float fre7 = freqSum(freqlist, 6000);ArrayList freal = new ArrayList();freal.add(fre1);freal.add(fre2);freal.add(fre3);freal.add(fre4);freal.add(fre5);freal.add(fre6);freal.add(fre7);ArrayList nal = new ArrayList();nal.add(1);nal.add(20);nal.add(100);nal.add(600);nal.add(2000);nal.add(3000);nal.add(
5、6000);System.out.println("-程序结束-");/ 生成Excel的类 try / 打开文件 WritableWorkbook book = Workbook.createWorkbook(new File("统计结果.xls");/ 生成工作表,参数0表示这是第一页 WritableSheet sheet = book.createSheet(sum+"字", 0);/* * 生成一个保存数字的单元格 必须使用Number的完整包路径,否则有语法歧义 */表头Label label1 = new Label(0
6、, 0, "字符");sheet.addCell(label1);Label label2 = new Label(1, 0, "频率");sheet.addCell(label2);for(int i=0;i<100;i+)/ 中文字符 Label label = new Label(0, i+1, chlist.get(i).toString();sheet.addCell(label);/ 出现的频率 jxl.write.Number number = new jxl.write.Number(1, i+1, (Float)freqlist.
7、get(i);sheet.addCell(number);/写入熵值Label lsh = new Label(0, 101, "熵值");sheet.addCell(lsh);jxl.write.Number nsh = new jxl.write.Number(1, 101, sh);sheet.addCell(nsh);/写入字频总和for(int i=0;i<freal.size();i+)if(Float)freal.get(i) != 0f)Label lfreq = new Label(0, 102+i, "前"+nal.get(i)
8、.toString()+"个汉字字频总和");sheet.addCell(lfreq);jxl.write.Number nfreq = new jxl.write.Number(1, 102+i, (Float)freal.get(i);sheet.addCell(nfreq);/写入数据book.write();/ 并关闭文件 book.close(); catch (Exception e) System.out.println(e);public static ArrayList readFromTable(String filename) ArrayList ch
9、list = new ArrayList();File file = new File(filename);Reader reader = null;try / 一次读一个字符reader = new InputStreamReader(new FileInputStream(file);int tempint;while (tempint = reader.read() != -1) / 判断读到的字符是否是中文if (tempint >= 'u4e00' && tempint <= 'u9fa5')| (tempint >=
10、 'uf900' && tempint <= 'ufa2d') char tempchar = (char) tempint;/ System.out.println(tempchar);/ System.out.println("list.size:" + chlist.size();/ 判断该字符是否出现过int i = 0;for (i = 0; i < chlist.size(); i+) / 一旦重复,跳出循环char c = ' 'Object ob = chlist.get(i);if
11、 (ob instanceof Character) c = (Character) ob;/ System.out.println("c:" + c);if (tempchar = c) / System.out.println("重复!");break;/ 字符从未出现过if (i = chlist.size() / System.out.println("新字符!");chlist.add(tempchar);reader.close(); catch (Exception e) e.printStackTrace();retu
12、rn chlist;/* * 该函数用于从文件中读取中文字符,并返回它出现的次数 * * param filename * return */public static ArrayList readFromFile(String filename, ArrayList chtable) File file = new File(filename);Reader reader = null;ArrayList numlist = new ArrayList();/ 初始化字符出现的次数集合for (int i = 0; i < chtable.size(); i+) numlist.add
13、(0);try / 一次读一个字符reader = new InputStreamReader(new FileInputStream(file);int tempint;int sum = 0;while (tempint = reader.read() != -1) / 判断读到的字符是否是中文if (tempint >= 'u4e00' && tempint <= 'u9fa5')| (tempint >= 'uf900' && tempint <= 'ufa2d')
14、char tempchar = (char) tempint;/ System.out.println(tempchar);/ System.out.println("list.size:" + chlist.size();/ 判断该字符是否在字表里int i = 0;for (i = 0; i < chtable.size(); i+) / 在字表里,统计重复次数并跳出循环char c = ' 'Object ob = chtable.get(i);if (ob instanceof Character) c = (Character) ob;/ S
15、ystem.out.println("c:" + c);if (tempchar = c) int num = (Integer) numlist.get(i) + 1;numlist.set(i, num);break;reader.close(); catch (Exception e) e.printStackTrace();return numlist;/* * 该函数用来对汉字出现的次数进行从大到小的排序,返回排序结果 * * param chlist * param numlist */public static ArrayList sort(ArrayList
16、 chtable, ArrayList numlist) ArrayList chlist = chtable;for (int i = 0; i < numlist.size(); i+) for (int j = i + 1; j < numlist.size(); j+) int listi = (Integer) numlist.get(i);int listj = (Integer) numlist.get(j);if (listi < listj) numlist.set(i, listj);numlist.set(j, listi);char chi = (Ch
17、aracter) chlist.get(i);char chj = (Character) chlist.get(j);chlist.set(i, chj);chlist.set(j, chi);return chlist;/* * 该函数用来计算各个汉字出现的频率,并且显示出指定个数的结果 * * param chlist * param numlist * param sum * param count */public static ArrayList frequency(ArrayList chlist, ArrayList numlist, int sum,int count) Ar
18、rayList freqlist = new ArrayList();/ 计算频率for (int j = 0; j < chlist.size(); j+) float freq = (Integer) numlist.get(j) / (float) sum;freqlist.add(freq);/ 按指定格式输出(保留6位有效数字)for (int j = 0; j < freqlist.size() && j < count; j+) System.out.println("字符:" + chlist.get(j);System.o
19、ut.println("出现次数:" + numlist.get(j);System.out.println("频率:" + freqlist.get(j);System.out.println("-");System.out.println("中文字符总数:" + sum);return freqlist;/* * 该函数用来计算熵值 * * param freqlist */public static float entropy(ArrayList freqlist) float sum = 0f;for (int i = 0; i < freqlist.size(); i+) float freq = (Float) freqlist.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025采购石料合同范本
- 2025届高三押题信息卷(一)政治及答案
- 职业技术学院2024级电梯工程技术专业人才培养方案
- 十二指肠扩张的临床护理
- 新质生产力含金量
- 浅析新质生产力
- 2025商品房买卖合同司法解释
- 2025年BIM工程师之BIM工程师综合练习试卷B卷附答案
- 新质生产力安全生产月
- 2025年上海市各区高三二模语文试题汇编《积累运用》含答案
- 《危险化学品企业安全风险隐患排查治理导则》解读
- 竞争优势:透视企业护城河
- 教学课件:《新时代新征程》
- 妇产科学-第九章-妊娠合并内外科疾病
- (新湘科版)六年级下册科学知识点
- 离散数学(下)智慧树知到课后章节答案2023年下桂林电子科技大学
- 医疗机构安全检查表
- 【基于双因素理论下Y公司基层员工激励机制研究11000字(论文)】
- 医务人员手卫生考试试题
- GB/T 42172-2022精油产品标签标识通则
- 肺癌SBRT的进展课件
评论
0/150
提交评论