gpt4 book ai didi

java - 递归grep,效率高

转载 作者:行者123 更新时间:2023-12-01 12:39:53 26 4
gpt4 key购买 nike

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

示例:

grep("hello","llo");

这将返回 3。这是因为它从 original[2] 开始匹配,即位置 3。但是,我遇到了索引外错误。我花了好几个小时还是没搞明白。

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;
}

最佳答案

您将收到 StringIndexOutOfBoundsException,因为您在过早且错误的阶段在循环内递增了 i

检查\0 是 C++ 的事情。 java中的字符串不是以\0结尾的。

您正在编写的内容已在 String 类中完成。有多种方法可用。

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

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

您还会问“这意味着我正在处理异常,不是吗?”。不,事实并非如此。异常是通过称为 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();
}

关于java - 递归grep,效率高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25212470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com