工做內容
題目1:
1)查找一個目錄下,全部文件中數字、字母(大小寫不區分)、漢字、空格的個數、行數。
2)將結果數據寫入到文件中。
文件格式以下:
數字:198213個
字母:18231個
漢字:1238123個
空格:823145個
行數:99812行
數字0:123個
數字1:1214個
數字2:23423個
……
字母A:754456個
字母B:7567個
字母C:456456個
使用方法
運用了i/o流的讀和寫,正則表達式,封裝:
思想:一開始我用了char型,就是以字符爲單位的讀,可是這個思想有許多的dug好比說不能判斷行數,換行認爲空格,
後來用了以行爲單位的讀,這個方法讀多少行就有多少行數
while ( (str11 =br.readLine()) != null) {// 判斷是不是最後一行
char[] c = str11.toCharArray();//把字符轉換爲char數組
沒有實現的功能:
1 不知道如何用正則表示漢字,
2 想用封裝來完成各個的個數沒有完成,。
3 寫出如何獲取行數。
體會:
發現本身還差的很遠:
1. 字符之間的轉換,
2. i/o流的許多細節還不夠熟練,
3. 正則表達式今天能夠說是第一次用,也是現學現用。
4.正則和字符串之間的運用 Pattern.compile("[a-zA-Z]").matcher(str1).matches()
5.讀取的時候出現中文亂碼
java
6.封裝的時候封裝不了大功能,能夠封裝裏面的小功能。
正則表達式
沒有實現的功能還的看書學習。
實例:數組
/** * 讀取文件 * * @param str */ public String readFile(String str) { int s = 0; int k = 0; int t = 0; int d = 0; int h = 0; String str2 = ""; File f = new File(str); try { FileInputStream fis = new FileInputStream(f); InputStreamReader isr = new InputStreamReader(fis,"gbk"); BufferedReader br = new BufferedReader(isr); try { String str11; while ( (str11 =br.readLine()) != null) {// 判斷是不是最後一行 char[] c = str11.toCharArray();//把字符轉換爲char數組 for (int i = 0; i < c.length; i++) { String str1 = String.valueOf(c[i]); // char轉換string if (Pattern.compile("[a-zA-Z]").matcher(str1).matches()) { s++; } // 字母的個數 if (Pattern.compile("[0-9]").matcher(str1).matches()) { k++; } // 數字的個數 if (Pattern.compile("[[^\\x00-\\xff]]").matcher(str1).matches()) { t++; } // 漢字的個數 if (Pattern.compile("[\\s]").matcher(str1).matches()) { d++; } // 空格的個數 // if (Pattern.compile("[\\t]").matcher(str1).matches()) // { // h++; }// } h++; // 回車的個數 } str2 = "字母:" + s + "個\t\n" + "數字:" + k + "個\t\n" + "漢字:" + t + "個\t\n" + "空格:" + d + "個\t\n" + "回車:" + h + "個\t\n"; System.out.println(str2); } catch (IOException e) { System.out.println("讀取失敗!!!"); } finally { try { if(br!=null){ br.close(); } if(isr!=null){ isr.close(); } if(fis!=null){ fis.close(); } } catch (IOException e) { System.out.println("關閉不成功!!"); } } } catch (FileNotFoundException e) { System.out.println("輸入失敗!!!"); } return str2; } /** * 寫出 * * **/ public void writeFile(String str, String paths) { try { File file = new File(paths); FileOutputStream fop = new FileOutputStream(file); if (!file.exists()) { file.createNewFile(); } byte[] contentInBytes = str.getBytes(); fop.write(contentInBytes); fop.flush(); fop.close(); } catch (IOException e) { e.printStackTrace(); System.out.println("寫入失敗!!!"); } } /** * 讀寫結合 * */ public class Combine { public void combineFile(String readPaths, String writePaths) { Read r = new Read(); String str1 = r.readFile(readPaths); Write w = new Write(); w.writeFile(str1, writePaths); } } public class Test { public static void main(String[] args) { Combine c = new Combine(); String writePaths="E:\\key1.txt"; String readPaths="E:\\key.txt"; c.combineFile(readPaths, writePaths); } } /** * 字符與正則匹配 str 字符 zhz 正則 * @return */ public boolean readNumber(String zhz, String str) { return Pattern.compile(zhz).matcher(str).matches(); }