/**java
编程语言:java
正则表达式
文档大小:351KB
算法
**/编程
问题解决步骤以下,首先我想到的是应该写一个类来读取本身电脑上的文本文档。部分代码以下代码所示:数组
public class ReadTxt { /** * 读取文本文件,abs_path表示绝对路径 * @param abs_path * @throws IOException */ public String fileReader(String abs_path) throws IOException{
获得了这篇文章以后,我将其转化为一个字符串数组,这里比较重要的就是如何分词,幸运的是java提供了这个功能,代码以下:编程语言
String[] strArray = new String[]{}; strArray = allWords.split("[^a-zA-Z0-9]+");
最后的步骤就是简单的统计每一个单词的频率。
函数
//找出每一个单词的频率 for(int j = 0; j < strArray.length;j++){ for (int k = 0; k < strArray.length; k++) { if((strArray[j].equalsIgnoreCase(strArray[k])) && (j != k)){ counterFrequent[0][j]++; } } }
在main函数里面的运行结果以下:性能
-----------------出现频率最多的十个单词以下-------------------测试
the 出现的频率是 1537 次spa
of 出现的频率是 633 次
to 出现的频率是 624 次
a 出现的频率是 585 次
in 出现的频率是 518 次
said 出现的频率是 507 次
He 出现的频率是 474 次
You 出现的频率是 421 次
it 出现的频率是 405 次
I 出现的频率是 330 次
接下来使用VisualVM测试其性能,得到的性能分析结果以下:
cpu使用状况:
从上图能够看到运行时间大概是三秒左右。
堆内存变化状况:
总共加载的类状况:
线程状况:
至此工做基本完成。
不足之处:因为我在排序的时候没有采用比较高效的算法,例如快速排序。而是本身写了一个简单的冒泡排序,所以与以前文档较小时运行时间比起来速度慢了不少。忽略了单词不正确的状况。
改进之处:能够采用高效的排序算法,或者运用java自带的hashMap效率会提升不少。
总结:在这个过程当中仍是遇到不少问题,好比程序问题,当我在读取文件的时候读取的不彻底。还有就是分词的正则表达式的写法。遇到的最大问题算是如何分析性能的问题吧,由于之前从没有接触过。我折腾了整整一天才弄出来一个结果,并且还不知道这个结果是否正确。可是,我很高兴老师布置这样的题目,在这个过程当中我学到了不少。