/**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效率會提升不少。
總結:在這個過程當中仍是遇到不少問題,好比程序問題,當我在讀取文件的時候讀取的不徹底。還有就是分詞的正則表達式的寫法。遇到的最大問題算是如何分析性能的問題吧,由於之前從沒有接觸過。我折騰了整整一天才弄出來一個結果,並且還不知道這個結果是否正確。可是,我很高興老師佈置這樣的題目,在這個過程當中我學到了不少。