Java中IO流-29-IO流練習題:統計一個檔案中字元出現個數
阿新 • • 發佈:2019-02-07
這篇來利用IO流知識來做兩個練習題。第一個題目是在文字檔案中統計字元出現次數,並寫入到一個txt檔案裡。第二個練習題是模擬,試用軟體30天倒計時,這裡我們簡化一下,執行一次程式碼,試用天就減去1天。
1.文字檔案內統計字元出現個數
題目:給定一個文字檔案,統計字元出現個數並寫入到檔案times.txt中。
分析:
前面我們學習雙列連結串列的時候,首選就是用HashMap來解題。只不過當時字元來源是字串或者陣列或者來源鍵盤輸入。今天來自文字檔案,所以,我們需要結合IO流的知識和HashMap知識來解決這個面試題。
package io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.TreeMap; public class Test3 { /** * 獲取一個文字上某些字元出現的次數,將結果寫在time.txt上 * * * 分析: * 1.首先建立帶緩衝的輸入流物件 * 2.建立雙列集合物件,hashmap或者treemap(支援排序) * 3.將讀到的字元存取在雙列結合,進行判斷,如果不包含就鍵和1儲存,如果包含這個鍵,就將改建和值+1儲存 * 4.關閉輸入流,建立輸出流物件 * 5.遍歷集合,將集合內容寫到輸出檔案time.txt上,關閉輸出流 * @throws IOException * */ public static void main(String[] args) throws IOException { //1.首先建立帶緩衝的輸入流物件 BufferedReader br = new BufferedReader(new FileReader("xxx.txt")); //2 建立雙列集合物件,hashmap或者treemap(支援排序) TreeMap<Character, Integer> tm = new TreeMap<>(); //3.將讀到的字元存取在雙列結合,進行判斷,如果不包含就鍵和1儲存,如果包含這個鍵,就將改建和值+1儲存 int ch; while( (ch = br.read()) != -1) { char c = (char)ch; //int轉換char型別 if (!tm.containsKey(c)) { tm.put(c, 1); }else { tm.put(c, tm.get(c)+1); } } //4.關閉輸入流,建立輸出流物件 br.close(); BufferedWriter bw = new BufferedWriter(new FileWriter("times.txt")); //遍歷集合,將集合內容寫到輸出檔案time.txt上,關閉輸出流 for(Character key : tm.keySet()) { bw.write(key + "="+ tm.get(key)); bw.newLine(); //換行 } bw.close(); } }
2.模擬軟體試用天數
加入一個檔案config.txt裡面儲存試用軟體天數,這裡我們用10天來舉例。執行一次程式碼,這個檔案裡面的天數就減去一,知道天數為零,就列印訊息“試用天數已結束,請購買正版軟體。”。
package io; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Test4 { /** * 模擬軟體試用天數 * @param args * * 分析: * 1.建立帶緩衝流的輸入流物件,因為要使用readLine方法,保持資料原樣性。 * 2.將讀取的字串轉換為int數 * 3.對int數進行判斷,如果大於0,就進行--操作,如果不大於0就提示請買正版 * 4.對判斷結果使用輸出流寫入到config.txt檔案,用字元輸出流 * @throws IOException */ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new FileReader("config.txt")); String line = br.readLine(); //字串轉換為int型別 int count = Integer.parseInt(line); //3.判斷 if( count > 0) { System.out.println("您還有" +count-- + "次機會"); FileWriter fw = new FileWriter("config.txt"); fw.write(count + ""); fw.close(); } else { System.out.println("試用已過期,請購買正版。"); } br.close(); } }