这个问题对我来说非常具体,所以我无法在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;
}
答案 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();
}