今天在做一個練習:統計文本中某個字符串出現的次數
剛開始用的是FileReader,方法代碼如下:
public static int countstr(String filename, String str) throws FileNotFoundException, IOException { FileReader fr = new FileReader(filename); BufferedReader br = new BufferedReader(fr); StringBuilder strb = new StringBuilder(); while (true) { String line = br.readLine(); if (line == null) { break; } strb.append(line); } String result = strb.toString(); char [] arr = result.toCharArray(); int count = 0; for(int i=0;i<arr.length;i++){ String arr1 = arr[i]+""; if(str.equals(arr1)){ count ++; } } br.close(); return count; }
我在文本里隨便寫了幾個英文字符串,發現運行沒問題。后來改成一連串漢字,發現問題來了,讀取的時候有亂碼,於是查資料發現了解決辦法代碼改成如下:
public static int countstr(String filename, String str) throws FileNotFoundException, IOException { //FileReader fr = new FileReader(filename); InputStreamReader isr =new InputStreamReader(new FileInputStream(filename), "GBK"); BufferedReader br = new BufferedReader(isr); StringBuilder strb = new StringBuilder(); while (true) { String line = br.readLine(); if (line == null) { break; } strb.append(line); } String result = strb.toString(); char [] arr = result.toCharArray(); int count = 0; for(int i=0;i<arr.length;i++){ String arr1 = arr[i]+""; if(str.equals(arr1)){ count ++; } } br.close(); return count; }
之后想了解FileReader與InputStreamReader的區別,區別如下:
1.FileInputStream:以字節流方式讀取;FileReader:把文件轉換為字符流讀入。
2.Reader類及其子類提供的字符流的讀取char(16位,unicode編碼),inputStream及其子類提供字節流的讀取byte(8位),所以FileReader類是將文件按字符流的方式讀取,FileInputStream則按字節流的方式讀取文件;