寻找子串算法(Java)

2008年8月22日 | 分类: 后端语言 | 标签:

这个算法用在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算法作出改进。

  1. Paul
    2008年8月24日09:07

    String类型里面有个IndexOf的函数,可以参考一下。

注意: 评论者允许使用'@user:'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC:'(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。