首先你會將記事本的外觀都做好。文本區域推薦使用JTextArea。假如這個文本的變量命名為jTextArea。接下來我開始寫算法了。建立一個類FindMethod,專門用來計算查找的算法。
public class FindMethod {
private NotePad note;//記事本的主類
private String text;//定義從記事本文本區域傳來的文本。
private String mathe;//定義您所查詢的字符串
private int ltext=0;//文本的長度
private int lmathe=0;//查詢字符串的長度
private char[] textc;//字符數組,保存文本的單個字符
private char[] mathec;//字符數組,保存查詢的單個字符
private int[] index; //返回將要查找到的字符串或字符所在記事本文本區域的索引
private int buttonsize;
private boolean isBreak = false;//是否需要循環
public FindMethod(String text,String mathe,NotePad note) {
this.text=text;
this.mathe=mathe;
this.note=note;
ltext=text.length();
lmathe=mathe.length();
mathec=new char[lmathe];
textc=new char[ltext];
index=new int[lmathe];
for(int i=0;i<ltext;i++) {
textc[i]=text.charAt(i);
}
for(int i=0;i<lmathe;i++) {
mathec[i]=mathe.charAt(i);
}
}
public void findText() {
int z=0;
if(lmathe>ltext) {//如果要查找的字符串的長度大于文本的長度則沒有匹配的內容
JOptionPane.showMessageDialog(note, "沒有到找匹配的內容!");
}
else {
for(int i=0;i<ltext-lmathe+1;i++) {
z=i;
for(int j=0;j<lmathe;j++) {
if(mathec[j]==textc[z]) {
isBreak=true;
index[j]=z;
z++;
}
else{
isBreak=false;
index=new int[lmathe];
break;
}
}
if(isBreak==true)
break;
}
}
}
public int[] getIndex() {
return index;
}
}
關于findText()方法,其實就是查找算法的核心。比如文本為“12345”,你要查找的是“45”。那么肯定是需要查找4次,并且要進行兩次比較(比較的內容是文本的'4'與查找的'4',文本的'5' 與查找的'5')。好了這些你知道了,那么你會發現其中有個規律。如果文本的長度是N,查找的文本的長度是M(N>=M),則有需要進行(N-M)+1次查詢,并且進行M次比較。如果比較成功的話那么isBreak就為true,并且讓index這個數組依次賦上比較的M的長度的索引,并且數組的范圍在<M,如果其中的一次比較失敗,那么isBreak就為false,讓大體循環在執行,大體循環也就是有多少次查詢。好了大體也就完事了,然后利用返回的index數組,index[0]和index[index.length()-1]分別代表要定位的記事本文本區域的開始和結束的索引值。然后利用jTextArea.select(index[0],index[index.length()-1]+1)方法來定位查找到的字符串。
以上的方法可能有些麻煩,但是我感覺整體的思路還是可以的,適合與我們這些菜鳥。如果看不懂,就多看幾遍,理解那個規律。再理解不了可以與我聯系,謝謝。實例附件在http://www.itkay.com/?action=show&id=29可以下載到