Posted on 2008-07-30 11:29 
G_G 阅读(1905) 
评论(2)  编辑  收藏  
			 
			
		 
		
		代码编辑耗时 40 分钟 ;自己感觉很慢!! 
		
		文本文件,我想写个Java程序,读一遍这个
文件,然后打印出来文件中英文字母(a 到 z)出现的次数。不区分大小写。
代码:
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) );
        }
    }
    
    
    //统计 文件字符工具方法
    public static Map<Character, Integer> getCountByFileLetters(String filePath) throws Exception{
        //逻辑 参数定义
        int int_A = 'A';
        int int_Z = 'Z';
        
        int int_a = 'a';
        int int_z = 'z';
        
        //数据收集 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");
        //临时数据收集
        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]++ ;
            }
        }
        
        //由 临时数据收集 转 到正式收集 
        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