寫一個Java應(yīng)用程序,使用RandomAccessFile流統(tǒng)計Hello.txt中的單詞,要求如下:?
(1)計算全文中共出現(xiàn)了多少個單詞(重復的單詞只計算一次);?
(2)統(tǒng)計出有多少個單詞只出現(xiàn)了一次;?
(3)統(tǒng)計并顯示出每個單詞出現(xiàn)的頻率,并將這些單詞按出現(xiàn)頻率高低順序顯示在一個TextArea中
import?java.io.*;
import?java.util.ArrayList;
import?java.util.Collections;
import?java.util.Comparator;
import?java.util.HashMap;
import?java.util.Iterator;
import?java.util.List;
import?java.util.Map;
??
import?javax.swing.JFrame;
import?javax.swing.JTextArea;
??
public?class?T4?{
??
????@SuppressWarnings("unchecked")
????public?static?void?main(String[]?args)?throws?IOException?{
??
????????String?fileName?=?"OPEN?FILE.txt";
????????RandomAccessFile?file?=?new?RandomAccessFile(new?File(fileName),?"r");
??????????
????????String?content?=?null;
??????????
????????Map<String,?Integer>?map?=?new?HashMap<String,?Integer>();
??????????
????????while((content?=?file.readLine())?!=?null){
??????????????
????????????String[]?ary?=?content.replaceAll("'|\\?|,|\\.|",?"").split("\\s+");
??????????????
????????????for(String?str?:?ary){
????????????????if(map.containsKey(str.trim())){
????????????????????map.put(str,?new?Integer(map.get(str).intValue()?+?1));
????????????????}else{
????????????????????map.put(str.trim(),?new?Integer(1));
????????????????}
????????????}
????????}???????????????????????????????????????????????????//這里是在存儲鍵值對嗎?
??????????
????????List?list?=?new?ArrayList();
??????????
????????for?(Iterator?iter?=?map.entrySet().iterator();?iter.hasNext();)?{
????????????Map.Entry<String,?Integer>?element?=?(Map.Entry<String,?Integer>)?iter.next();
????????????list.add(new?WordFreq(element.getKey(),?element.getValue()));
????????}???????????????????????????????????????????????????????????????//這里是在遍歷哈希列表對嗎?
??????????
????????Collections.sort(list,?new?Comparator<WordFreq>(){
????????public?int?compare(WordFreq?o1,?WordFreq?o2)?{
???????????return?o1.getCount()?<?o2.getCount()??1:?-1;
????????}
????????});??????????????????????????????????????????????????????????//collections.sort這段代碼是什么意思呢?
??????????
????????int?uniqueCount?=?0;
????????final?StringBuilder?sb?=?new?StringBuilder();
????????final?String?NEW_LINE?=?"\r\n";
??????????
????????for(Object?obj:?list){
????????????WordFreq?item?=?(WordFreq)?obj;
????????????uniqueCount?+=?(item.getCount()?==?1??1:?0);
????????????sb.append(item.toString());
????????????sb.append(NEW_LINE);
????????}????????????????????????????????????????????????????????//上面這段代碼是在做什么呢?
??????????
????????JFrame?f?=?new?JFrame();
????????JTextArea?result?=?new?JTextArea();
??????????
????????result.append("Total?"?+?list.size()?+?"?words?found?in?"?+?fileName);
????????result.append(NEW_LINE);
????????result.append("Total?"?+?uniqueCount?+?"?words?appear?only?once");
????????result.append(NEW_LINE);
????????result.append(NEW_LINE);
????????result.append(sb.toString());
??????????
????????f.add(result);
????????f.setVisible(true);
????????f.pack();
????????f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
??????????
????}
??
}
??
class?WordFreq{
????private?String?word;
????private?int?count;
??????
????public?WordFreq(String?word,?int?count){
????????this.word?=?word;
????????this.count?=?count;
????}
??
????public?int?getCount()?{
????????return?count;
????}
??????
????public?String?toString(){
????????return?word?+?"\t"?+?count;
????}
??????
}?????????????????????????????//定義的這個類的作用是什么呢?
1 回答
已采納

sntatas
TA貢獻53條經(jīng)驗 獲得超11個贊
這里是在存儲鍵值對嗎? 對的
這里是在遍歷哈希列表對嗎? 對的
collections.sort這段代碼是什么意思?
這里是對list中的元素進行排序,根據(jù)集合中的元素的count實例變量的值的進行排序從大到小排序,這是一種策略模式
上面這段代碼在做什么?
獲取list中所有元素的字符串形式到sb對象中
定義這個類是做什么用的?
集合中的對象就是這個類
看樣子你對Java集合沒有搞清楚,建議你去學學Java集合,還有字符串對象String、StringBuilder、StringBuffer區(qū)別
添加回答
舉報
0/150
提交
取消