2013-04-27 34 views
0

我有一個任務,需要我從input.txt文件中取詞並按頻率對它們進行排序,然後將它們寫入output.txt文件。刪除字符串數組中的重複單詞並寫入輸出文件

我遇到的問題是,一旦我找到輸入文件中每個單詞的頻率,我不知道如何刪除重複項以及如何防止它們寫入輸出文件。

+0

爲什麼你把字符串放入一個StringBuilder只是爲了拆分它們,而不是僅僅使用ArrayList或類似的東西? – Xymostech 2013-04-27 02:10:36

+0

我的教授希望我們使用StringBuilder。我也想做一個ArrayList以及 – dmetal23 2013-04-27 02:21:41

回答

0

考慮到,當你的內部'j'循環結束時,你的外部'i'循環可能繼續在下一個出現的相同的字。這就是爲什麼你看到多次輸出相同的單詞,每次計數減少一次。

當'j'循環結束時,您可以通過將'i'設置爲'j'來獲得更近的距離。或者,考慮消除'j'循環,並將令牌[i]與令牌[i-1]進行比較。

之後,你仍然不會按字頻排序輸出。但你不想讓我們做你的功課。

我建議使用Eclipse之類的Java IDE,並學習如何使用Java調試器。

+0

我愛你Joel。解決這個簡單問題的簡單方法。最佳答案! – dmetal23 2013-04-27 02:41:31

+0

而且我肯定會在整個慘敗之後下載Eclipse。我一直在使用蹩腳的JGRASP。 – dmetal23 2013-04-27 02:42:59

-1

先過濾它們然後對它們進行排序。就像使用數組列表來存儲字符串並使用循環來檢查字符串是否已經在數組列表中,並且在過濾之後,現在可以對它們進行排序。

+0

Arraylist不是正確的數據結構。 – Lokesh 2013-04-27 02:20:52

+0

基本上,arraylist只能用於存儲字符串,它只是用於基本和簡單的 – 2013-04-27 02:24:33

+0

,但在每次插入時檢查arraylist中的重複項會非常昂貴,這就是爲什麼我說錯誤選擇數據結構。 – Lokesh 2013-04-27 02:25:35

0

這裏是我將使用的邏輯:

  1. 創建類其中將包含字符串值和計數。讓它校驗StringVal。 StringVal中的Equals和hashcode方法不會使用count,而只會使用String值。
  2. 使用HashMap如:Map<StringVal,int> strCount = new HashMap<StringVal,int>();
  3. 現在繼續閱讀並在地圖中存儲字符串。如果地圖中不存在,則增加,如果存在,則增加計數。 [這刪除了重複]
  4. 現在編寫一個比較器,可以根據計數對StringVal進行排序。

有了這個邏輯,你可以實現你正在尋找的。

+0

我真的很抱歉,但我對HashMap或TreeMap完全不熟悉。我正在考慮將字符串數組存儲到一個新的字符串臨時數組中,然後編寫一個循環來通過在將它們寫入文件之前查找重複來過濾它們。 – dmetal23 2013-04-27 02:26:17

+0

@Daniel:這將是非常昂貴的操作。一張地圖對於你的問題將是正確的數據結構。我建議稍微閱讀一下。會很有幫助/ – Lokesh 2013-04-27 02:29:12

0

將每個單詞用作散列映射中的一個鍵每次出現一個新鍵或遞增整數。一旦完成循環通過中的每一個鍵...

相關問題