java程序编辑器_java实现编辑器(一)
昨天下半天的作品,不敢独享,发代码以抛砖引玉,望高手指点!!!
初步完成了四项基本功能:
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实现编辑器(一)相关推荐
- 第一个java程序释义_Java 学习之路(1)第一个Java程序
Hello World程序 在编程语言的世界里,第一个编程语言估计就是输出Hello World了吧. /** * 编写第一个Java程序,输出Hello World! * @author LJS * ...
- java程序结构_Java 程序结构说明(学习 Java 编程语言 004)
1. 一个简单的类 创建 FirstSample.java 文件,来编写最简单的 Java 应用程序.下面是示例代码: public class FirstSample { public static ...
- java程序结构_java程序结构
java是一门面向对象的语言,在编程过程中当然离不开对象的声明,而对象又是通过类定义的,所以java中最重要的就是各式各样的类,在java中,类也是一个程序的基本单位 0x01:默认生成类 在ecli ...
- java程序员_Java程序员工资为什么这么高?
众多行业中, 程序员当然属于高薪职业.无论是国内还是国外,IT行业的程序员.工程师,甚至连码农都要比其他行业的从业者的收入高很多!尤其是作为IT界的"常青树"Java,原因是什么? ...
- java程序员_Java和Python的区别 好程序员帮大家解读
Java和Python的区别 好程序员今天先来解读Java编程语言的优势,人工智能和大数据火爆一时,随之而来,引起了编程语言的人气暴涨.而Java和Python作为最炙手可热的编程语言从一开始便赢得了 ...
- java程序初始化_Java程序初始化顺序
今天在课上复习了Java的初始化顺序,一直有点疑惑,搞不明白,所以打算写下来,记录一下. 先说一下Java程序初始化的顺序:父类静态变量>父类静态代码块>子类静态变量>子类静态代码块 ...
- java程序组成_java程序是由什么组成的
展开全部 1.源程序文32313133353236313431303231363533e78988e69d8331333363373732件的构成 要编写Java程序,首先应该知道Java程序文件中必 ...
- java程序示例_Java程序中的Google搜索示例
java程序示例 Sometime back I was looking for a way to search Google using Java Program. I was surprised ...
- java程序员_java程序员这个职业赚钱吗,看一线程序员怎么说
java程序员这个职业赚钱吗?能赚多少钱?相信很多即将进入这个行业的年轻朋友都想问这个问题.之所以拿出一个俗不可耐的"钱"字来和大家大谈,因为这是很多朋友关心的问题. java程序 ...
- java程序知识_java的基本知识点
java的基本知识点 Java语言具有功能强大和简单易用两个特征.下面是小编为大家整理的java的基本知识点,欢迎参考~ 1. JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM ...
最新文章
- 图解 SQL,这也太形象了吧!
- DotnetSpider (二) Downloader的设置 Request自定义数据字典
- 机器学习-有监督-SVM
- MFC一一添加WM_USER自定义消息
- java编程思想 初始化_《java编程思想》_第五章_初始化与清理
- 深入了解EntityFramework——Fluent API
- Java 函数引用 替代方案
- java高级框架应用开发案例教程_Java高级框架应用开发案例教程:struts2+spring+hibernate PDF...
- linux怎么新建系统用户名,在 Linux 中不使用 useradd 命令如何创建用户账号
- NO.164 禅道的自定义功能:导航和主页的自定义
- 爬虫实例之获取豆瓣前250名电影名称
- Windows和Mac系统上常用的MySQL客户端工具
- 2022年 iOS面试题总结
- 完美生成年度节假日表,Kettle还能这么玩!
- 从前有座山,山上有两台计算机
- (侯捷C++)1.2面向对象高级编程(上)
- python中self image_Python3用tkinter和PIL实现看图工具
- 基于点、线数据三维地质建模方法
- 金蝶kis系统连接服务器,金蝶kis客户端远程连接服务器
- Java OOP 第四章 抽象类和接口
热门文章
- HDU 5950 Recursive sequence(矩阵快速幂)
- MariaDB-5.5.56 主主复制+keepalived高可用
- iOS开发 常见错误
- 创新创业大讲堂第一讲
- [转]很经典的http协议详解
- 转载 电子商务关键数字优化(线上部分,中)
- 使用STS创建Spring boot project报错:Project build error: Non-resolvable parent POM for
- EJB Remote/Local 绑定和JNDI Lookup
- 【转】 基于C#.NET的高端智能化网络爬虫 2
- 微服务化架构演进与人员组织