?? textfindreplace.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()方法用于創建主界面和創建有關查找和替換字符串結果信息的對話框*/ public void create(){ //下面是創建主界面 frObj = new Frame("Text find and replace example"); //taObj代表界面上的文本區域 taObj = new TextArea(); //tfObj1代表用于輸入待查找或替換前的字符串的文本框 tfObj1 = new TextField(); //tfObj2代表用于輸入替換后的字符串的文本框 tfObj2 = new TextField(); //初始化兩個按鈕對象,分別用來實現”查找“和”替換“操作 buttonObj1 = new Button("Find"); buttonObj2 = new Button("Replace"); //下面的三個Label對象用于顯示有關的提示信息 labObj1 = new Label("文本區域:"); labObj2 = new Label("待查找或替換前的字符串:"); labObj3 = new Label("替換后的字符串:"); //接下來的5個Panel對象用于控制主界面上各組件的位置和大小 pObj1 = new Panel(); pObj2 = new Panel(); pObj3 = new Panel(); pObj4 = new Panel(); pObj5 = new Panel(); //pObj1用于控制文本區域和相關提示信息的相對位置 pObj1.setLayout(new BorderLayout()); pObj1.add("North",labObj1); pObj1.add("Center",taObj); //pObj2用于控制第一個文本框和相關提示信息的相對位置 pObj2.setLayout(new BorderLayout()); pObj2.add("North",labObj2); pObj2.add("Center",tfObj1); //pObj3用于控制第二個文本框和相關提示信息的相對位置 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按鈕和主窗口添加事件監聽器 buttonObj1.addMouseListener(this); buttonObj2.addMouseListener(this); frObj.addWindowListener(this); //下面兩個語句設置主界面的大小并讓主界面可見 frObj.setSize(400,260); frObj.setVisible(true); /*下面的語句用于創建一個對話框,當用戶單擊Find按鈕或者Replace按鈕后,根據結果顯示 一個有關結果信息的對話框,對話框上有一個Label組件和一個OK按鈕,Label組件用于顯示 查找或替換字符串的次數*/ 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用于處理鼠標單擊的事件,也就是當鼠標單擊事件發生后,程序就會進入該方法中執行*/ public void mouseClicked(MouseEvent e){ //下面這個語句用于獲得事件源按鈕 Button butObj = (Button)(e.getSource()); //下面的if語句處理事件源是Find按鈕或Replace按鈕時的情況 if(butObj.getLabel()=="Find"||butObj.getLabel()=="Replace") { /*String型變量strObj1和strObj2獲得文本區域和第一個文本框中的文字內容*/ String strObj1 = taObj.getText(); String strObj2 = tfObj1.getText(); //變量matchNum代表字符串匹配的次數,初始值為0 int matchNum = 0; //cursorPos代表光標當前的位置 int cursorPos = taObj.getCaretPosition(); //實例化一個matchFun類的對象 matchFun classObj = new matchFun(); //下面的if語句處理單擊Find按鈕事件 if(butObj.getLabel()=="Find") { //通過調用matchFun類的方法strFind計算出字符串匹配的次數 matchNum = classObj.strFind(strObj1,strObj2,cursorPos); //下面的一行語句重新設置對話框上Label對象的文本內容 textLab.setText("共找到"+matchNum+"處"); diaObj.show(); } //接下來的if語句處理單擊Replace按鈕事件 if(butObj.getLabel()=="Replace") { //變量strObj3獲得第二個文本框中的字符串 String strObj3 = tfObj2.getText(); //通過調用matchFun類中的strReplace按鈕計算字符串匹配次數 matchNum = classObj.strReplace(strObj1,strObj2,strObj3,cursorPos); //重新設置對話框上Label對象的文本內容 textLab.setText("共替換到"+matchNum+"處"); //下面的語句用于刷新字符串替換后文本區域的文字顯示 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方法,關閉窗口時,程序退出 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用于處理有關字符串查找和替換算法*/class matchFun{ StringBuffer repStr; /*方法strFind用于實現字符串查找,返回匹配的次數*/ public int strFind(String s1,String s2,int pos) { /*變量i和j分別表示主串和模式串中當前字符串的位置,k表示匹配次數*/ 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()表示字符串匹配成功,匹配次數加1 k = k+1; //將指示主串和模式串中當前字符的變量i和j進行回退 i = i-j+1; j = 0; } } else {i = i-j+1; j = 0;} } return k; } /*方法strReplace用于實現字符串替換操作,返回替換的次數*/ public int strReplace(String s1,String s2,String s3,int pos) { /*變量i和j分別表示主串和模式串中當前字符串的位置,k表示匹配次數*/ int i,j,k=0; i = pos; j = 0; //將s1轉化成StringBuffer型進行操作 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()表示字符串匹配成功,匹配次數加1,此外對主串進行字符串替換*/ k = k+1; repStr.replace(i-j,i,s3); //將j進行重新賦值開始新的比較 j = 0; } } else {i = i-j+1; j = 0;} } return k; }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -