首先你会将记事本的外观都做好。文本区域推荐使用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
textc[i]=text.charAt(i);
}
for(int i=0;i
mathec[i]=mathe.charAt(i);
}
}
public void findText() {
int z=0;
if(lmathe>ltext) {//如果要查找的字符串的长度大于文本的长度则没有匹配的内容
JOptionPane.showMessageDialog(note, "没有到找匹配的内容!");
}
else {
for(int i=0;i
z=i;
for(int j=0;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的长度的索引,并且数组的范围在
以上的方法可能有些麻烦,但是我感觉整体的思路还是可以的,适合与我们这些菜鸟。如果看不懂,就多看几遍,理解那个规律。再理解不了可以与我联系,谢谢。实例附件在http://www.itkay.com/?action=show&id=29可以下载到
posted on 2008-07-25 00:48 ppoo 阅读(952) 评论(0) 编辑 收藏