由一次java作业 引起的思考

   

JAVA上机作业

文本统计器:

1.创建一个类,实现统计文本文件中各类字符和字符串的个数的功能,要求实现:

(1)       按字符统计,输出各个字符的数量;

(2)       按单词统计,输出各个单词的数量;

2.在1(2)的基础上,实现一个类Keywordidentifier读入一个java程序源文件,输出各个关键字的个数。

(注意,注释中出现的关键字不计入关键字个数)

     也没看java几天。呵呵。     用Map一切都解决了,都不带的思考。把Map看看之后,很快就把它给解决掉了。其实吧,我觉得学完了C 和C ++之后,再来学java,毫无压力,主要他们属于同一派系的,记得高手说过,老学一个派系的语言,学得太多也没用,应该拓展来学,比如再高点脚本呀或者其它的什么语言。那样才能学到更多的东西。总之,还是那句话,精通算法和数据结构,关于语言的东西都是相同的。所以java还是边用边学吧。没必要专门又去学了。(个人见解)

   今天还发现个问题。最近我做ACM题老喜欢看别人的思路,看别人的代码,有错了就去对照别人的。今天发现我的代码调试能力都下降了!!!尼玛不行啊,这可是个不好的习惯!!主要是我太急于求成了,没有自己好好思考,好好调试。所以要调整好心态,多思考。AC的代码只能说是我们的参考,不能一出现问题就去拿它的来对照,那样你永远也不会有长进的。知道么??!!必须改正这个坏习惯。

还是上代码来吧。

import java.io.*;
import java.util.*;


public class CalculateWords {
    // 打开哈希表
     public static HashMap<Character,Integer> map=new HashMap<Character,Integer>();
     public static HashMap<String ,Integer> has = new HashMap<String ,Integer> ();
     public static HashMap<String ,Integer> key = new HashMap<String ,Integer> ();
//    统计字符的个数
     public static HashMap<Character,Integer> CharCounter(String s){
         for(int i=0; i<s.length(); i++)
         {
             Character c=s.charAt(i);
              Integer count=map.get(c);
             map.put(c,count==null?1:count+1);
         }
         return map;
     }
     
     //统计单词的个数
     public static void WordCounter(String str)
     {
        
           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 );
                 }
             }
     }
     
     //统计关键字的个数
     public static void Keywordidentifier(String s)
     {
         String[] keyword={"public","static","int","if","else",
                 "for","class","break","return"};
         String[] slist = s.split("\\b");
         for (int i = 0; i < slist.length; i++)
         {
             for(String item:keyword)
             {
                 if(item.equals(slist[i]))
                 {
                     if(!key.containsKey(slist[i]))
                     {
                        key.put(slist[i], 1); 
                     }
                     else
                     {
                         key.put(slist[i],key.get(slist[i])+1);
                     }
                     break;
                 }
             }
         } 
     }
     
    public static void main(String[] args)throws IOException
    {
      long filePoint=0;
      String s;
      RandomAccessFile file=new RandomAccessFile("in.txt", "r");
      long fileLength=file.length(); //获取文件长度
      while(filePoint<fileLength)
      {
          s=file.readLine();  //读取一行字符,并移动文件指针
          //统计每个字符的频率
          CharCounter(s);
         
          //统计每个单词的频率
          WordCounter(s);
          
          //统计关键字
          Keywordidentifier(s);
          filePoint=file.getFilePointer();
      }
      System.out.println(map);
      System.out.println(has);
      System.out.println(key);
        
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值