posts - 165, comments - 198, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

一道题面试题!

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




评论

# re: 一道题面试题!  回复  更多评论   

2008-07-31 09:55 by Always BaNg.
晕,统计字数使用了这么高级的数据结构,Map, Collection都用上了。

一般关于算法的题都是用基本数据类型和数组来完成的,否则就不通用了。

不是每种语言都支持Map,Collection的。

这种答案我肯定否定掉。

# re: 一道题面试题!  回复  更多评论   

2008-07-31 10:22 by G_G
谢谢提醒
我收集到 int[] iis 数据后直接返回 !
不过 我使用的 Map,Collection 只是为 返回后 的使用方便哦!
最核心的 循环体内 是使用基本数据类型 ,还是 单元操作
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]++ ;
}

当了也是出于私心 秀下 自己对 jdk 的了解了 ^_^

只有注册用户登录后才能发表评论。


网站导航: