在Java中通过haystack(较大的String数组)筛选针(String数组)

时间:2016-01-17 07:17:46

标签: java arrays string

我需要返回大海捞针位置的索引位置  数组针阵列发生,否则为-1。例如,如果String haystackArray = [red, blue, green]和String needleArray = [blue, green],它应该为针发生的haystack的1索引位置返回1。

以下是我的代码:

    public static int FindSequence(String[] haystack, String[] needle)
    {
        int numInSequence = 0;
        int counter = 0;

        if(haystack.length == 0 || needle.length == 0)  
            return -1;
        if(needle.length > haystack.length)
            return -1;
        for(int i = 0; i < haystack.length-1; i++) //for the length of haystack
        {
            if(needle[0].equals(haystack[i]))//if the first item in needle is equivalent to this particular item in haystack...
            {
                numInSequence = i;
                numInSequence+=1;
                for(int j = 1; j < needle.length-1; j++, numInSequence++){ //for the remaining length of the needle... 
                    if(needle[j].equals(haystack[numInSequence])){ //checks to see if the next item in needle is equivalent to the next item in haystack and if this 
                        counter++;
         if((needle[needle.length-1]).equals(haystack[numInSequence])){ // if the last item in needle is equivalent to an item in haystack...
                            return numInSequence - counter - 1; // return our desired index
                        }
                    }     
                    break;
                }
                break;
            }
        } 
        return -10;
    }  

出于某种原因,我尝试了几乎所有的数组测试,我得到-10返回。任何建议或帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

将循环条件更改为

for(int i = 0; i < haystack.length; i++)

 for(int j = 1; j < needle.length; j++, numInSequence++){

使用您当前的当前代码,您正在跳过最后一个索引。

此外,如果j < needle.length -1,它怎么能进入你的

if((needle[needle.length-1]).equals(haystack[numInSequence])){

并返回return numInSequence - counter - 1;。这就是bug的来源。

举一个例子,如果数组中有10个元素,则索引为0-9。而你正在检查&lt;而不是&lt; 9 10.因此,您的代码不会检查索引9。