日期:2014-05-19  浏览次数:20861 次

读取txt文件找出出现最多的几个字母
读取文件有按字符读取放入字符数组,再从数组中找出出现频率最多的m个字符,
也可以BufferedReader按行读取到String,再从字符串中找出出现频率最多的m个字符。
菜鸟求解答!求代码!

------解决方案--------------------
Java code
    public static Map<Character, Integer> freq(String input){
        HashMap<Character, Integer> fq = new HashMap<>();
        while(input.length() > 0){
            char c = input.charAt(0);
            int l1 = input.length();
            input = input.replace(String.valueOf(c),"");
            int l2 = input.length();
            fq.put(c,l1-l2);
        }
        return Collections.unmodifiableMap(fq);
    }

    public static void main(final java.lang.String[] args) {
        System.out.println(freq("adadaefadfgarfaf"));
    }

------解决方案--------------------
看见人家贴代码了,就不附上自己的了。
一般软件方面男人做开发,女生做测试。
其实测试感觉最大的好处就是稳定,不用到处跑,也不用每日每夜的加班,男生一般可以克服这两点,所以男生一般做开发。当然,如果你也能做到这两点,也可以的,男女生智力方面的区别很小的,可以忽略。
测试个人感觉最大的缺点就是涨工资涨的慢,当然,如果能做到白盒测试,那收入也是很客观的。
------解决方案--------------------
探讨
引用:

int[] ary = new int[26];

char c; //c为 读入进来的 字符

ary[c-'a'] = ary[c-'a']+1;

排序 最大

另外说一下 如果是面试 不要一上来就说 按行读取 某些文件没有换行符 几个G的字符 就1行 你按行读进来 会很开心的


不好意思,我想问一下 ary[c-'a'] = ary[……

------解决方案--------------------
看来热心的人还是很多的,我简单说下原题的意图吧:

完整原题是:“编写完整程序,对code.txt文件进行分析,找出其中出现次数最多的3种字母并输出显示。已知该文件全部由大写英文字母构成。语言不限,可续写背面;如遗忘语句,可只写伪代码,但最多给5分。”

这里其实为了照顾使用C++等语言的,已经尽量简化了要求:为了避免单词处理复杂度,常规是进行词频统计,这里特意改成字频;为了避免需要使用Map之类的数据结构,这里特意说全都只有大写字母。

考点其实就几个:
1、文件操作;
2、循环处理字母频度,用数组或Map都可以;
3、输出前三,这个比只输出最大略微提升点点难度。

如果这个题目完全,做不出来,客观地说动手能力的基础是偏薄弱的。