?? textfindreplace2.java
字號:
import java.awt.*;import java.awt.event.*;public class TextFindReplace implements MouseListener,WindowListener{ private Frame frObj; private TextArea taObj; private TextField tfObj1,tfObj2; private Button buttonObj1; private Button buttonObj2; private Panel pObj1,pObj2,pObj3,pObj4,pObj5; private Label labObj1,labObj2,labObj3; boolean boolObj = false; Dialog diaObj; Label textLab; Button butObj2 = new Button("OK"); public static void main(String args[]) { TextFindReplace examObj = new TextFindReplace(); examObj.create(); } /**create()方法用于創(chuàng)建主界面和創(chuàng)建有關(guān)查找和替換字符串結(jié)果信息的對話框*/ public void create(){ //下面是創(chuàng)建主界面 frObj = new Frame("Text find and replace example"); //taObj代表界面上的文本區(qū)域 taObj = new TextArea(); //tfObj1代表用于輸入待查找或替換前的字符串的文本框 tfObj1 = new TextField(); //tfObj2代表用于輸入替換后的字符串的文本框 tfObj2 = new TextField(); //初始化兩個按鈕對象,分別用來實現(xiàn)”查找“和”替換“操作 buttonObj1 = new Button("Find"); buttonObj2 = new Button("Replace"); //下面的三個Label對象用于顯示有關(guān)的提示信息 labObj1 = new Label("文本區(qū)域:"); labObj2 = new Label("待查找或替換前的字符串:"); labObj3 = new Label("替換后的字符串:"); //接下來的5個Panel對象用于控制主界面上各組件的位置和大小 pObj1 = new Panel(); pObj2 = new Panel(); pObj3 = new Panel(); pObj4 = new Panel(); pObj5 = new Panel(); //pObj1用于控制文本區(qū)域和相關(guān)提示信息的相對位置 pObj1.setLayout(new BorderLayout()); pObj1.add("North",labObj1); pObj1.add("Center",taObj); //pObj2用于控制第一個文本框和相關(guān)提示信息的相對位置 pObj2.setLayout(new BorderLayout()); pObj2.add("North",labObj2); pObj2.add("Center",tfObj1); //pObj3用于控制第二個文本框和相關(guān)提示信息的相對位置 pObj3.setLayout(new BorderLayout()); pObj3.add("North",labObj3); pObj3.add("Center",tfObj2); //pObj4用于控制Find按鈕和Replace按鈕的相對位置 pObj4.setLayout(new FlowLayout(FlowLayout.CENTER,20,20)); pObj4.add(buttonObj1); pObj4.add(buttonObj2); //pObj5用于控制pObj2、pObj3和pObj4的相對位置 pObj5.setLayout(new GridLayout(3,1)); pObj5.add(pObj2); pObj5.add(pObj3); pObj5.add(pObj4); //最后通過frObj控制整體的效果 frObj.setLayout(new GridLayout(1,2)); frObj.add(pObj1); frObj.add(pObj5); //為Find按鈕、Replace按鈕和主窗口添加事件監(jiān)聽器 buttonObj1.addMouseListener(this); buttonObj2.addMouseListener(this); frObj.addWindowListener(this); //下面兩個語句設(shè)置主界面的大小并讓主界面可見 frObj.setSize(400,260); frObj.setVisible(true); /*下面的語句用于創(chuàng)建一個對話框,當(dāng)用戶單擊Find按鈕或者Replace按鈕后,根據(jù)結(jié)果顯示 一個有關(guān)結(jié)果信息的對話框,對話框上有一個Label組件和一個OK按鈕,Label組件用于顯示 查找或替換字符串的次數(shù)*/ diaObj = new Dialog(frObj); diaObj.setLayout(new FlowLayout(FlowLayout.CENTER,40,20)); textLab = new Label(""); diaObj.add(textLab); diaObj.add(butObj2); butObj2.addMouseListener(this); diaObj.setSize(200,100); } /**方法mouseClicked用于處理鼠標(biāo)單擊的事件,也就是當(dāng)鼠標(biāo)單擊事件發(fā)生后,程序就會進(jìn)入該方法中執(zhí)行*/ public void mouseClicked(MouseEvent e){ //下面這個語句用于獲得事件源按鈕 Button butObj = (Button)(e.getSource()); //下面的if語句處理事件源是Find按鈕或Replace按鈕時的情況 if(butObj.getLabel()=="Find"||butObj.getLabel()=="Replace") { /*String型變量strObj1和strObj2獲得文本區(qū)域和第一個文本框中的文字內(nèi)容*/ String strObj1 = taObj.getText(); String strObj2 = tfObj1.getText(); //變量matchNum代表字符串匹配的次數(shù),初始值為0 int matchNum = 0; //cursorPos代表光標(biāo)當(dāng)前的位置 int cursorPos = taObj.getCaretPosition(); //實例化一個matchFun類的對象 matchFun classObj = new matchFun(); //下面的if語句處理單擊Find按鈕事件 if(butObj.getLabel()=="Find") { //通過調(diào)用matchFun類的方法strFind計算出字符串匹配的次數(shù) matchNum = classObj.strFind(strObj1,strObj2,cursorPos); //下面的一行語句重新設(shè)置對話框上Label對象的文本內(nèi)容 textLab.setText("共找到"+matchNum+"處"); diaObj.show(); } //接下來的if語句處理單擊Replace按鈕事件 if(butObj.getLabel()=="Replace") { //變量strObj3獲得第二個文本框中的字符串 String strObj3 = tfObj2.getText(); //通過調(diào)用matchFun類中的strReplace按鈕計算字符串匹配次數(shù) matchNum = classObj.strReplace(strObj1,strObj2,strObj3,cursorPos); //重新設(shè)置對話框上Label對象的文本內(nèi)容 textLab.setText("共替換到"+matchNum+"處"); //下面的語句用于刷新字符串替換后文本區(qū)域的文字顯示 StringBuffer taText = classObj.repStr; taObj.setText(taText.toString()); diaObj.show(); } } //下面的if語句用于處理事件源為OK按鈕時的情況 if(butObj.getLabel()=="OK") { //單擊OK按鈕后,信息提示對話框消失,主界面顯示 diaObj.hide(); frObj.show(); } } //下面的語句重寫MouseListener和WindowListener接口中的方法 public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} //重寫windowClosing方法,關(guān)閉窗口時,程序退出 public void windowClosing(WindowEvent e){ System.exit(0); } public void windowOpened(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowClosed(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} }/**類matchFun用于處理有關(guān)字符串查找和替換算法*/class matchFun{ public int nextval[]; StringBuffer repStr; public void getNext(String t) { int i,j,arr; arr = t.length(); i = 1; nextval = new int[arr]; nextval[0] = 0; j = 0; while( i < t.length()-1) { if(j == 0 || t.charAt(i) == t.charAt(j)) { ++i; ++j; if(t.charAt(i)!=t.charAt(j)) nextval[i] = j; else nextval[i] = nextval[j]; } else j = nextval[j]; } } public int indexKMP(String s1,String s2,int pos,int nextval[]) { int i,j; i = pos; j = 0; while(i<s1.length()&&j<s2.length()) { if(j==0 || s1.charAt(i)==s2.charAt(j)) {++i;++j;} else j = nextval[j]; } if(j==s2.length()) return 1; else return 0; } /*方法strFind用于實現(xiàn)字符串查找,返回匹配的次數(shù)*/ public int strFind(String s1,String s2,int pos) { /*變量i和j分別表示主串和模式串中當(dāng)前字符串的位置,k表示匹配次數(shù)*/ int i,j,k=0; //pos代表主串中開始比較的位置 i = pos; j = 0; while(i<s1.length()&&j<s2.length()) { if(s1.charAt(i) == s2.charAt(j)) { ++i; ++j; if(j==s2.length()) { //j=s2.length()表示字符串匹配成功,匹配次數(shù)加1 k = k+1; //將指示主串和模式串中當(dāng)前字符的變量i和j進(jìn)行回退 i = i-j+1; j = 0; } } else {i = i-j+1; j = 0;} } return k; } /*方法strReplace用于實現(xiàn)字符串替換操作,返回替換的次數(shù)*/ public int strReplace(String s1,String s2,String s3,int pos) { /*變量i和j分別表示主串和模式串中當(dāng)前字符串的位置,k表示匹配次數(shù)*/ int i,j,k=0; i = pos; j = 0; //將s1轉(zhuǎn)化成StringBuffer型進(jìn)行操作 repStr = new StringBuffer(s1); while(i<repStr.length()&&j<s2.length()) { if(repStr.charAt(i) == s2.charAt(j)) { ++i; ++j; if(j==s2.length()) { /*j=s2.length()表示字符串匹配成功,匹配次數(shù)加1,此外對主串進(jìn)行字符串替換*/ k = k+1; repStr.replace(i-j,i,s3); //將j進(jìn)行重新賦值開始新的比較 j = 0; } } else {i = i-j+1; j = 0;} } return k; }}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -