使用Java在字符串中查找子字符串

时间:2015-04-04 07:36:54

标签: java substring

我在网上找到了这个答案,但我无法理解以下几行代码在完整代码中的作用:

if (haystackLen - i + 1 < needleLen)
            return null;

找到以下完整代码:

  public String strStr(String haystack, String needle) {

        int needleLen = needle.length();
        int haystackLen = haystack.length();

        if (needleLen == haystackLen && needleLen == 0)
            return "";

        if (needleLen == 0)
            return haystack;

        for (int i = 0; i < haystackLen; i++) {
            // make sure in boundary of needle
            if (haystackLen - i + 1 < needleLen)
                return null;

            int k = i;
            int j = 0;

            while (j < needleLen && k < haystackLen && needle.charAt(j) == haystack.charAt(k)) {
                j++;
                k++;
                if (j == needleLen)
                    return haystack.substring(i);
            }

        }

        return null;
    }

2 个答案:

答案 0 :(得分:0)

if (haystackLen - i + 1 < needleLen)
            return null;

因此,您正在迭代haystack并检查其中的needle。在每次迭代

haystackLen - i + 1

给出了要解析的大海捞针中String的长度,当你想要找到的needleLen小于你要确定进一步迭代时没有用的{{1}}。 / p>

答案 1 :(得分:0)

基本上你的代码正在检查第二个String在第一个String中是否存在(确切地)然后你返回First String。

为:

haystack="indian";
needle="india";

然后输出将是“印度”

如果

haystack="indian";
needle="indian";

然后输出将是“印度”。

如果

haystack="india";

needle="indian";

然后输出将为“null”。

这是你的困惑。

 if (haystackLen - i + 1 < needleLen)
     return null;

如果第二个字符串长度大于第一个,并且第一个字符串匹配,直到第二个字符串中的当前索引,它返回null;这意味着第二个String不是第一个String的子串。