簡體   English   中英

我應該如何在Java中實現子字符串功能?

[英]How should I implement a substring function in java?

考慮到您已經被告知要實現一種Java String.substring方法。
該方法的簽名如下:

公共靜態布爾值isSubstring(String i_StringForSearch,String i_SubStringToFind)

這是我的解決方案,但我覺得它仍然不是我可以擁有的最好的優雅解決方案。
你怎么看? 你會用另一種方式嗎?

public static boolean isSubstring(String i_StringForSearch, String i_SubStringToFind)
    {
        int strForSearchIndex = 0;
        int subStrToFindIndex = 0;
        boolean endOfStringToSearch = false;
        boolean foundSubString = false;
        boolean isThereASequenceOfMatching = false;


        while(!endOfStringToSearch && !foundSubString)
        {
            if(strForSearchIndex == i_StringForSearch.length())
            {
                endOfStringToSearch = true;
            }

            else if(i_StringForSearch.charAt(strForSearchIndex) == i_SubStringToFind.charAt(subStrToFindIndex))
            {
                isThereASequenceOfMatching = true;
                if(subStrToFindIndex == i_SubStringToFind.length() -1 )
                {
                    foundSubString = true;
                }
                subStrToFindIndex++;
                strForSearchIndex++;
            }

            else if(i_StringForSearch.charAt(strForSearchIndex) != i_SubStringToFind.charAt(subStrToFindIndex))
            {
                if(isThereASequenceOfMatching)
                {
                    subStrToFindIndex = 0;
                    isThereASequenceOfMatching = false;
                }
                strForSearchIndex++;
            }
        }

       return foundSubString;
    }

查找Boyer-Moore和Knuth-Morris-Pratt算法。 在多年前的測試中,我發現BM的速度要快一些。

public static boolean isSubstring(final String i_StringForSearch, final String i_SubStringToFind) {
    int j = 0;
    for (int i = 0; i < i_StringForSearch.length(); i++) {
        if (i_StringForSearch.charAt(i) == i_SubStringToFind.charAt(j)) {
            j++;
            if (j == i_SubStringToFind.length()) {
                return true;
            }
        }
    }
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM