posts - 165, comments - 198, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          一道題面試題!

          Posted on 2008-07-30 11:29 G_G 閱讀(1885) 評論(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 的了解了 ^_^

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 奉化市| 沭阳县| 仲巴县| 安新县| 南溪县| 镇赉县| 弋阳县| 施秉县| 德格县| 信阳市| 庆元县| 余姚市| 巨野县| 丰顺县| 阿拉善右旗| 荔浦县| 柯坪县| 舒城县| 紫阳县| 资溪县| 庆城县| 五河县| 临泽县| 葫芦岛市| 龙州县| 卢龙县| 灵宝市| 额济纳旗| 通渭县| 屏东县| 义乌市| 平阴县| 遂平县| 南溪县| 越西县| 天等县| 仪征市| 梁山县| 东丰县| 阿城市| 天水市|