这个算法用在DocWeb中的method的查找过程中。在ClassDoc中分别有API name()和method()。前一个是返回这个ClassDoc类型的名字的,也就是Java源码中某个类的名字的,例如AnnotationDesc,而后一个返回的是一个数组,数组中存储的这个Class的所有方法,但是其中存储的是它的全路径例如,com.sun.javadoc.AnnotationDesc.annotationType()。这时候,我就面对这样一个问题,我需要取出后面的字符串,在我这个例子中是annotationType().
算法如下:
static private int getNo(String str,String subStr)
{
int end=str.length()-subStr.length();
if(end>=0)
{
for(int k=0;k<=end;k++){
for(int l=0;str.charAt(k+l)==subStr.charAt(l);l++){
if(l==subStr.length()-1) return(k+l+1);
}
}
}
return(-1);
}
这里返回的整数就是下一个要输出字符串的位置。
主函数如下:
public static void main(String[] args) {
String a="sdlfkabcdf";
String b="abc";
int no=getNo(a,b);
if(no>0){
System.out.println(a.substring(no));
}else{
System.out.println("an erro accured");
}
}
输出结果:
df
这个算法的时间复杂度是O(n2),算法的效率一般,但是工作起来还可以,下次可以参考KMP算法作出改进。