1. 程式人生 > >Java中IO流-29-IO流練習題:統計一個檔案中字元出現個數

Java中IO流-29-IO流練習題:統計一個檔案中字元出現個數

這篇來利用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();
	}

}