-2

所以基本上,我创建了一个 contains 方法,它打印出我需要的正确输出,但是在它这样做之后它给了我一个错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at MethodTesting.main(MethodTesting.java:90)

不知道为什么当它显示输出时不用担心?如果有人可以让我知道我做错了什么?我的代码在下面,我尝试将长度调整为长度和长度-1,如下所示。我用字符串而不是 char 数组编写了代码,但是它不会给我正确的结果。希望有人能解释一下吗?

        //contains method
    char[] st = "Hello World".toCharArray();
    char[] substr = "llo".toCharArray();
    for(int contains=0; contains<st.length-1; contains++){
        if(substr[contains] == st[contains]){
            for(int j=contains; j<st.length-1; j++){
                if(st[j] == substr[j]){
                }
                else{
                    contains = -1;
                }
            }
        }
        System.out.println("CONTAINS");
        System.out.println(contains);
    }

提前致谢!

4

3 回答 3

1

假设您正在尝试搜索字符串的子字符串,这可以在String.contains()方法中完成。如果您尝试自己实现该方法,则必须像这样更改代码:

public static void main (String[] args) 
{
    char[] st = "Hello World".toCharArray();
    char[] substr = "llo".toCharArray();

    for(int contains = 0; contains < st.length - substr.length; contains++) {
        int j;
        for(j = 0; j < substr.length; j++) {
            if(st[contains + j] != substr[j]) {    // mismatch    
                break;
            }
        }
        if (j == substr.length)   // Every character in substr has been matched
           System.out.println("Contains");
    }
}
于 2013-09-22T06:50:42.527 回答
0

您的数组长度不相等,但在第二个循环中,您假设它们是相等的。 contains可以是高于 的值substr.length,因此j也将是。

为确保您在迭代时不会离开数组,请在第二个循环中修复您的界限。

更改for(int j=contains; j<st.length-1; j++)for(int j=contains; j<substr.length; j++)。这将确保您的第二个循环永远不会执行 if contains > substr.length,而它一直在执行j < st.length()-1

于 2013-09-22T06:41:42.413 回答
0

st数组长度和substr长度不同。所以该行 j<st.length-1;应该是j<substr.length-1;

于 2013-09-22T06:42:13.073 回答