统计java关键字_统计java源程序各个关键字个数

这是一个用Java编写的简单程序,用于统计Java源代码文件中的关键字数量。作者从C++转向Java,面临适应面向对象编程的挑战。程序通过读取Java源文件,使用正则表达式分割并匹配关键字,然后使用TreeMap存储和计数。最后,程序输出关键字的总数及其出现次数。
摘要由CSDN通过智能技术生成

(菜鸟所做,高手绕道)。

习惯于C++和C,习惯于面向过程,一下子要转到面向对象,这个过程非常痛苦和不爽。

本来不想学JAVA的,但是本人选的专业课就包括java,没办法,只好硬着披头看看书。发现java很多跟C++相似,但是感觉java是彻底的面向对象,他封装好的类非常多,光看String类的文档就把我看晕了。C++思维太阻碍我对java的适应了,以至于对文件的操作看了好几遍也没看的很懂,一个简单的作业竟做了一天才做完。太菜鸟了。

由于作业要求读取一个java源程序,分析出每个关键字个数。我的第一反应就是C++的map集合,java中map分了好几个类,但是感觉没有C++的好用,在C++中会自动完成值增1所以只需要把所有的东西往map中扔就OK了,但是java中值还需要自己动手初始化、增加(我还没有体会到它的妙处吧)。

昨天家里出了点事,心情非常不开心,所以很多时候没心情看书,代码的很多细节的东西也没心情仔细看,以至于老是导致读取越界,结果就是CPU使用率达100%,动不了了。作为碰碰撞撞才做出来的作业,想想还是放出代码,希望有人指出错误。

注意,java关键字最好放在一个文本中,可以提高重复利用率。我放在数组中,后来懒得改代码了。我读取的java源程序文件用的是本程序源文件。

国际惯例,部分源码:

***********************************************************************

class KeyworldsIdentifier //统计关键字的类

{

//java中的关键字存放进数组中

//注意,统计程序关键字时并不包括此数组中的关键字,因为“int”等字符串无法用正则表达式区分出关键字来

String KEYWORDS[]={"abstract","assert","boolen","break","byte","case","catch","char","class","const",

"continue","default","do","double","else","enum","extends","final","finally","float","for",

"if","implements","import","instanceof","int","interface","long","native","new","package",

"private","protected","public","return","short","static","strictfp","super","switch","synchrpnized",

"this","throw","throws","transient","try","void","volatile","while"};

TreeMap < String,Integer > keycode = new TreeMap < String , Integer > ();

String Keys[];//用于存放正则表达式划分出来的字符串

String Lineword = null;//用于存放从文件中读进的每一行字符串

int ChildStrNum;//每一行字符串的子字符串个数

int num3 = 0;//用于统计关键字的总个数

void Handle(BufferedReader StringBuff)throws IOException

{

for ( int k=0; k

{

keycode.put(KEYWORDS[k], new Integer(0));

}

while ((Lineword=StringBuff.readLine())!= null)

{

Keys=Lineword.trim().split(" ");//去掉前导空格,根据正则表达式以空格划分字符串

ChildStrNum=Keys.length;//每一行字符串的子字符串个数

for( int j=0;j

{

if (keycode.containsKey(Keys[j]))

{

num3++;

Integer number3=(Integer)keycode.get(Keys[j]);//获取集合中关键字已有的个数

keycode.put(Keys[j], new Integer(number3.intValue()+1));//关键字个数增1

}

}

}

}

void Print()//输出关键字统计信息

{

System.out.println("\n该文件关键字个数为:"+num3);

System.out.println("每个关键字个数为:");

Iterator iter3=keycode.keySet().iterator();

int m=0;//用作换行

while (iter3.hasNext())

{

Object temp3=iter3.next();//获取迭代器所指向的对象

if (keycode.get(temp3)>0)

{

m++;

System.out.print(temp3.toString()+":"+keycode.get(temp3)+" ");

if(m%10==0)

System.out.println();

}

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值