递归grep效率很高

时间:2014-08-08 21:23:52

标签: java

这个问题对我来说非常具体,所以我无法在Stack Overflow上找到相关问题。所以,我正在编写一个如下所示的grep。我对stringindextoutofboundexception感到困惑。原因是因为我正在检查它是否等于\0。这意味着我正在处理出界异常,不是吗?

示例:

grep("hello","llo");

这将返回3.这是因为它在位置3的original[2]处开始匹配。但是,我遇到了索引错误。我花了好几个小时,我无法理解。

public static int grep(String ori, String ma){
    int toReturn = 0;
    int oCounter = 0;
    int i = 0;
    while (i < ma.length()){
      if (ori.charAt(toReturn) == ma.charAt(i)){
        i++;
        if (ma.charAt(i) == '\0'){ // error on this line
          return toReturn;
        }
        toReturn++;
        if (ori.charAt(toReturn) == '\0'){ // and this line if i delete the section above.
          return -1;
        }

      } else {
        i = 0;
        toReturn++;
      }

    }
    return -1;
}

1 个答案:

答案 0 :(得分:1)

你得到一个StringIndexOutOfBoundsException,因为你在一个过早和错误的阶段在循环内增加i

检查\ 0是C ++的事情。 java中的字符串不是\ 0终止。

您正在编写的内容已在String类中完成。有几种方法可供选择。

System.out.println("hello".indexOf("llo"));

将打印2,因为它已被找到并从索引2开始。如果您因某种原因不喜欢从0开始,可以随意添加1。

您还要问&#34;这意味着我正在处理异常,不是吗?&#34;。不,它没有。使用称为try-catch语句的特殊语法处理异常。例如:

try {
    // possibly more lines of code here
    do_something_that_might_cause_exception();
    // possibly more lines of code here
} catch (Exception e) {
    // something did indeed cause an exception, and the variable e holds information about. We can do "exceptional" handling here, but for now we print some information.
    e.printStackTrace();
}