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

解决方案 »

  1.   

    求代码? 搞个 hashmap 的(字母, 出现次数 ) 容器 便利txt 后 看哪个多久完了。
      

  2.   

    这个用集合list,set,map
    list:保存所有字符
    set: 获取不重复字符
    map:key:不重复字符,value:通过对list与set遍历获取每个字符的个数
    然后从map中获取最多的字符..
      

  3.   

        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"));
        }
    {f=4, g=1, d=3, e=1, r=1, a=6}
      

  4.   

    java统计一篇文章中单词出现的次数import java.util.HashMap;
    import java.util.Iterator;
     
    /**
     * @author Administrator
     * 2011-10-20 9:25
     */
    //哈希表计出现次数
    public class Has {
      // 统计单词出现的次数
        public static String StatList(String str) {
       StringBuffer sb = new StringBuffer();
       HashMap<String ,Integer> has = new HashMap<String ,Integer> (); // 打开一个哈希表
       String[] slist = str.split("\\b");
       for (int i = 0; i < slist.length; i++) {
             if (!has.containsKey(slist[i])) { // 若尚无此单词
                     has.put(slist[i], 1);
             } else {//如果有,就在将次数加1
                     has.put(slist[i],has.get(slist[i])+1 );
            }
         }
    //遍历map
         Iterator iterator = has.keySet().iterator();
          while(iterator.hasNext()){
                 String word = (String) iterator.next();
                 sb.append("单词:").append(word).append(" 次数").append(has.get(word)).append("\n");
          }
    return sb.toString();
    }
     
    public static void main(String[] args) {
            String s = new String("You are the mananger of an office supplies company. A colleague has received a letter compaining about an order for office furniture. She has left the letter for you to answer and has written some notes on it.");
            System.out.println(StatList(s));
    }
    }
      

  5.   

    int[] ary = new int[26];char c;  //c为 读入进来的 字符ary[c-'a'] = ary[c-'a']+1;排序 最大另外说一下 如果是面试 不要一上来就说 按行读取   某些文件没有换行符  几个G的字符 就1行 你按行读进来 会很开心的
      

  6.   

    补充一下  用int[]  要考虑文件大小  不过 int 支持2G的txt文件不成问题不过面试的时候能把这个也说上,是个加分项
      

  7.   


    不好意思,我想问一下  ary[c-'a'] = ary[c-'a']+1; 实现的什么逻辑啊?
      

  8.   


    你运行一下char c='b'  //c为 26个字母的任意一个
    System.out.println(c-'a');应该就能明白了
      

  9.   

    看来热心的人还是很多的,我简单说下原题的意图吧:完整原题是:“编写完整程序,对code.txt文件进行分析,找出其中出现次数最多的3种字母并输出显示。已知该文件全部由大写英文字母构成。语言不限,可续写背面;如遗忘语句,可只写伪代码,但最多给5分。”这里其实为了照顾使用C++等语言的,已经尽量简化了要求:为了避免单词处理复杂度,常规是进行词频统计,这里特意改成字频;为了避免需要使用Map之类的数据结构,这里特意说全都只有大写字母。考点其实就几个:
    1、文件操作;
    2、循环处理字母频度,用数组或Map都可以;
    3、输出前三,这个比只输出最大略微提升点点难度。如果这个题目完全,做不出来,客观地说动手能力的基础是偏薄弱的。