Posted on 2008-07-30 11:29
G_G 阅读(1851)
评论(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