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<locationBuffer;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<s.length();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在該檔案的所在位置(單位:字元):1 21
//關鍵字static在檔案中有:1個。
//static在該檔案的所在位置(單位:字元):35
//關鍵字void在檔案中有:1個。
//void在該檔案的所在位置(單位:字元):42
//關鍵字int在檔案中有:3個。
//int在該檔案的所在位置(單位:字元):23 15 66
//關鍵字double在檔案中有:1個。
//double在該檔案的所在位置(單位:字元):158
//關鍵字float在檔案中有:1個。
//float在該檔案的所在位置(單位:字元):186
//(⊙_⊙!),編譯出錯: " { " 和" } " 不配對,多出5個" } "
相關文章
- Quill編輯器實現原理初探UI
- 利用 javascript 實現富文字編輯器JavaScript
- xheditor編輯器上傳功能實現
- 10分鐘實現Typora(markdown)編輯器
- 手把手實現富文字編輯器
- iOS使用UITableView實現的富文字編輯器iOSUIView
- 實現一個簡單的在瀏覽器執行Dotnet編輯器瀏覽器
- 又一編輯神器-百度編輯器-Ueditor
- Java 藉助ImageMagic實現圖片編輯服務Java
- 一個較為完備的 antd 視覺化編輯器實現視覺化
- 如何實現一個能精確同步滾動的Markdown編輯器
- Java編輯器jEdit 5.0釋出Java
- 所見即所得富文字編輯器實現原理
- 地圖編輯器幾種實現的總結地圖
- 實時程式碼編輯器
- Java編寫的文字編輯器(菜鳥作品)Java
- 使用CodeMirror實現Python3線上編輯器Python
- 簡單的低開編輯器(二):實現元件拖拽元件
- 如何在jsp上實現報表編輯器功能?JS
- 一款開源的Markdown轉富文字編輯器的實現原理剖析
- Vue寫一個Markdown編輯器Vue
- 如何實現div可編輯效果
- Asp.Net Core 使用Monaco Editor 實現程式碼編輯器ASP.NET
- Qt中文字編輯器實現語法高亮功能(Qscitinlla)QT
- Android原生簡易圖文編輯器和展示實現Android
- 小夥伴們驚呆了!10行 JavaScript 實現文字編輯器JavaScript
- Unity3D實現地圖編輯器的外掛Unity3D地圖
- 低開開發筆記(四):實現編輯器內拖拽筆記
- 【Android】書客編輯器安卓Java版Android安卓Java
- 文字編輯器原始檔(java語言) (轉)Java
- 公式編輯器公式
- vim編輯器
- 實用的Plist編輯器:Penguin for MacNGUIMac
- 用java實現業務邏輯Java
- Eclipse Java類編輯器裡出現亂碼的解決方案EclipseJava
- PureBasic 現代 BASIC 程式語言編輯器
- 雜湊表:如何實現word編輯器的拼寫檢查?
- 直播平臺搭建原始碼,純js實現編輯器撤消/重做原始碼JS