昨天下半天的作品,不敢独享,发代码以抛砖引玉,望高手指点!!!

初步完成了四项基本功能:

1,提取文件。

2,删除注释。

3,关键字识别。

4,符号匹配。

源代码:

import java.io.File;//用于创建文件

import java.io.IOException ;//用来处理异常信息

import java.io.InputStream ;

import java.io.FileInputStream ;

public class Compiler {

//功能1. 将注释删除掉 这里先将“//”的全部注释删除,暂没考虑“/*....*/”和“/*....**/”的情况

public static void deleteAnnotation(String s){

StringBuffer Sb=new StringBuffer(s);

int annotationLocation=0;

int lineFeedLocation=0;

//

//if(Sb.lastIndexOf("//")>Sb.lastIndexOf("\n")){//消除最后一行没有回车的注释,不然影响后面程序的执行

//annotationLocation=Sb.lastIndexOf("//");

//Sb.delete(annotationLocation, Sb.length());

//}

while(-1!=Sb.indexOf("//")){

annotationLocation=Sb.indexOf("//",0);//记录注释“//”出现的位置

lineFeedLocation=Sb.indexOf("\n",annotationLocation);//记录离“//”最近的回车换行的位置

Sb.delete(annotationLocation, lineFeedLocation);//将注释删除

}

System.out.println(Sb.toString());//验证结果

}

// 功能2. 下面的方法完成找到指定关键字,并统计字符串中某关键字(key)的个数

public static void keyCount(String s,String key){

short[] location=new short[256];//记录key的位置

StringBuffer Sb= new StringBuffer(s);

int keyCount=0;//暂存关键字的个数

int temp=0;//暂存int位置的信息

int locationBuffer=0;//

while(-1!=Sb.indexOf(key)){

//此条件用来避免关键字(key)在含在普通字符中的情况,如int出现在“print”中。

if(Sb.charAt(Sb.indexOf(key)-1)==' '&&Sb.charAt(Sb.indexOf(key)+key.length())==' '||Sb.charAt(Sb.indexOf(key)+key.length())=='['){//此处还有bug!

keyCount++;

location[locationBuffer]=(short)Sb.indexOf(key);

locationBuffer++;

}

temp=Sb.indexOf(key);

Sb.delete(0,temp+key.length());//将含有key前的所有字符均删除

}

if(keyCount>0){

System.out.println("关键字"+key+"在文件中有:"+ keyCount+"个。");

System.out.print(key+"在该文件的所在位置(单位:字符):");

for(int i=0;i

System.out.print(location[i]+"\t");

}

System.out.println('\n');

}

}

//功能3. 判断需要“互相匹配(matching)”的字符,如“大括号”、“小括号”等

public static void matching(String s,char characterLeft,char characterRight){

int CharacterCount=0;

char c=' ';

for(int i=0;i

if(characterLeft==s.charAt(i)){CharacterCount++;}

if(characterRight==s.charAt(i)){CharacterCount--;}

}

//输出验证

if(CharacterCount!=0){

System.out.print("(⊙_⊙!),编译出错: \" "+characterLeft+" \" 和"+"\" "+characterRight+" \" 不配对,");

if(CharacterCount>0)

System.out.println("少了"+CharacterCount+"个\" "+characterRight+" \"");

else

System.out.println("多出"+(-CharacterCount)+"个\" "+characterRight+" \"");

}

}

public static void main(String args[])throws Exception{//此处为了代码简洁,直接将异常交给JVM(java虚拟机)了

//功能3 读入文件

// 使用File类找到一个文件

File f=new File("e:\\Hello.java");//★★此处你可以在你的电脑上找一个文件(如*.java)进行验证,注:此处有2个反斜杠“\”。★★

//读入E盘的“Hello.java”文件

// 通过子类实例化父类对象

InputStream input = null ;// 准备好一个输入的对象

input = new FileInputStream(f) ;// 通过对象多态性,向上转型进行实例化(⊙o⊙)哦

byte b[] = new byte[1024] ;// 所有的内容都读到此数组之中

input.read(b) ;// 读取内容

input.close() ;// 关闭输出流

String ss=new String(b ) ; //把byte数组变为字符串输出

String s=" "+ss+"\n";//加" "为了字符位置的匹配,

//加"\n"为了消除注释在最后时没有回车符的情况

Compiler.deleteAnnotation(s);

Compiler.keyCount(s,"main");//此处有bug!待解

Compiler.keyCount(s,"class");

Compiler.keyCount(s,"public");//此处有bug!待解

Compiler.keyCount(s,"static");

Compiler.keyCount(s,"void");

Compiler.keyCount(s,"int");

Compiler.keyCount(s,"double");

Compiler.keyCount(s,"float");

Compiler.keyCount(s,"char");

Compiler.matching(s, '{', '}');

Compiler.matching(s, '[', ']');

Compiler.matching(s, '(', ')');

}

}

//执行结果:

//关键字class在文件中有:1个。

//class在该文件的所在位置(单位:字符):8

//关键字public在文件中有:2个。

//public在该文件的所在位置(单位:字符):121

//关键字static在文件中有:1个。

//static在该文件的所在位置(单位:字符):35

//关键字void在文件中有:1个。

//void在该文件的所在位置(单位:字符):42

//关键字int在文件中有:3个。

//int在该文件的所在位置(单位:字符):231566

//关键字double在文件中有:1个。

//double在该文件的所在位置(单位:字符):158

//关键字float在文件中有:1个。

//float在该文件的所在位置(单位:字符):186

//(⊙_⊙!),编译出错: " { " 和" } " 不配对,多出5个" } "

java程序编辑器_java实现编辑器(一)相关推荐

  1. 第一个java程序释义_Java 学习之路(1)第一个Java程序

    Hello World程序 在编程语言的世界里,第一个编程语言估计就是输出Hello World了吧. /** * 编写第一个Java程序,输出Hello World! * @author LJS * ...

  2. java程序结构_Java 程序结构说明(学习 Java 编程语言 004)

    1. 一个简单的类 创建 FirstSample.java 文件,来编写最简单的 Java 应用程序.下面是示例代码: public class FirstSample { public static ...

  3. java程序结构_java程序结构

    java是一门面向对象的语言,在编程过程中当然离不开对象的声明,而对象又是通过类定义的,所以java中最重要的就是各式各样的类,在java中,类也是一个程序的基本单位 0x01:默认生成类 在ecli ...

  4. java程序员_Java程序员工资为什么这么高?

    众多行业中, 程序员当然属于高薪职业.无论是国内还是国外,IT行业的程序员.工程师,甚至连码农都要比其他行业的从业者的收入高很多!尤其是作为IT界的"常青树"Java,原因是什么? ...

  5. java程序员_Java和Python的区别 好程序员帮大家解读

    Java和Python的区别 好程序员今天先来解读Java编程语言的优势,人工智能和大数据火爆一时,随之而来,引起了编程语言的人气暴涨.而Java和Python作为最炙手可热的编程语言从一开始便赢得了 ...

  6. java程序初始化_Java程序初始化顺序

    今天在课上复习了Java的初始化顺序,一直有点疑惑,搞不明白,所以打算写下来,记录一下. 先说一下Java程序初始化的顺序:父类静态变量>父类静态代码块>子类静态变量>子类静态代码块 ...

  7. java程序组成_java程序是由什么组成的

    展开全部 1.源程序文32313133353236313431303231363533e78988e69d8331333363373732件的构成 要编写Java程序,首先应该知道Java程序文件中必 ...

  8. java程序示例_Java程序中的Google搜索示例

    java程序示例 Sometime back I was looking for a way to search Google using Java Program. I was surprised ...

  9. java程序员_java程序员这个职业赚钱吗,看一线程序员怎么说

    java程序员这个职业赚钱吗?能赚多少钱?相信很多即将进入这个行业的年轻朋友都想问这个问题.之所以拿出一个俗不可耐的"钱"字来和大家大谈,因为这是很多朋友关心的问题. java程序 ...

  10. java程序知识_java的基本知识点

    java的基本知识点 Java语言具有功能强大和简单易用两个特征.下面是小编为大家整理的java的基本知识点,欢迎参考~ 1. JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM ...

最新文章

  1. 图解 SQL,这也太形象了吧!
  2. DotnetSpider (二) Downloader的设置 Request自定义数据字典
  3. 机器学习-有监督-SVM
  4. MFC一一添加WM_USER自定义消息
  5. java编程思想 初始化_《java编程思想》_第五章_初始化与清理
  6. 深入了解EntityFramework——Fluent API
  7. Java 函数引用 替代方案
  8. java高级框架应用开发案例教程_Java高级框架应用开发案例教程:struts2+spring+hibernate PDF...
  9. linux怎么新建系统用户名,在 Linux 中不使用 useradd 命令如何创建用户账号
  10. NO.164 禅道的自定义功能:导航和主页的自定义
  11. 爬虫实例之获取豆瓣前250名电影名称
  12. Windows和Mac系统上常用的MySQL客户端工具
  13. 2022年 iOS面试题总结
  14. 完美生成年度节假日表,Kettle还能这么玩!
  15. 从前有座山,山上有两台计算机
  16. (侯捷C++)1.2面向对象高级编程(上)
  17. python中self image_Python3用tkinter和PIL实现看图工具
  18. 基于点、线数据三维地质建模方法
  19. 金蝶kis系统连接服务器,金蝶kis客户端远程连接服务器
  20. Java OOP 第四章 抽象类和接口

热门文章

  1. HDU 5950 Recursive sequence(矩阵快速幂)
  2. MariaDB-5.5.56 主主复制+keepalived高可用
  3. iOS开发 常见错误
  4. 创新创业大讲堂第一讲
  5. [转]很经典的http协议详解
  6. 转载 电子商务关键数字优化(线上部分,中)
  7. 使用STS创建Spring boot project报错:Project build error: Non-resolvable parent POM for
  8. EJB Remote/Local 绑定和JNDI Lookup
  9. 【转】 基于C#.NET的高端智能化网络爬虫 2
  10. 微服务化架构演进与人员组织