Posted on 2008-07-30 11:29
G_G 閱讀(1882)
評論(2) 編輯 收藏
代碼編輯耗時 40 分鐘 ;自己感覺很慢!!
文本文件,我想寫個Java程序,讀一遍這個
文件,然后打印出來文件中英文字母(a 到 z)出現(xiàn)的次數(shù)。不區(qū)分大小寫。
代碼:
import?java.io.FileInputStream;
import?java.io.InputStreamReader;
import?java.util.Collections;
import?java.util.LinkedHashMap;
import?java.util.Map;
public?class?LinjiawangMain?{
????
????public?static?void?main(String[]?args)?throws?Exception?{
????????Map<Character,?Integer>?map?=?getCountByFileLetters("chars.txt")?;
????????for(char?ctmp?:?map.keySet()){
????????????System.out.println(?ctmp+"="+map.get(ctmp)?);
????????}
????}
????
????
????//統(tǒng)計?文件字符工具方法
????public?static?Map<Character,?Integer>?getCountByFileLetters(String?filePath)?throws?Exception{
????????//邏輯?參數(shù)定義
????????int?int_A?=?'A';
????????int?int_Z?=?'Z';
????????
????????int?int_a?=?'a';
????????int?int_z?=?'z';
????????
????????//數(shù)據(jù)收集?map?(保持存儲順序?使用?LinkedHashMap?)
????????Map<Character,?Integer>?map?=?new?LinkedHashMap<Character,?Integer>();
????????
????????//以?ISO-8859-1?字符?讀取?.classpath?下的?文件?
????????InputStreamReader?read?=?new?InputStreamReader(new?FileInputStream(
????????????????LinjiawangMain.class.getClassLoader().getResource(filePath)
????????????????????????.getPath()),?"ISO-8859-1");
????????//臨時數(shù)據(jù)收集
????????int[]?iis?=?new?int[int_z-int_a];
????????while(read.ready()?){
????????????int?itmp?=?read.read();
????????????//?當?'a'<=itmp<='z'?(短路)
????????????//?當?'A'<=itmp<='Z'?(非短路)?后修改itmp到?'a'?到?'z'范圍?
????????????if(?
????????????????(?itmp?>=int_a?&&?itmp<=int_z?)?||
????????????????(?itmp>=int_A?&&?itmp<=int_Z??)?|?(itmp=(itmp+(int_a-int_A)))>=int_a?
????????????){
????????????????iis[itmp-int_a]++?;
????????????}
????????}
????????
????????//由?臨時數(shù)據(jù)收集?轉?到正式收集?
????????for(int?i=0;i<int_z-int_a;i++){
????????????map.put(?(char)(i+int_a),iis[i]?);
????????}
????????//非修改?map?
????????return?Collections.unmodifiableMap(map)?;
????}
????
}
文件:aAbbbbCCCCc2345ABdb
abc
d