查找字符串2在字符串1中开始的索引

时间:2014-11-03 05:36:05

标签: java string

所以我用多种不同的方法编写程序,其中一种方法要求在第一个字符串中找到第二个字符串开始的索引

该方法接受两个字符串作为参数,并返回第一个字符串开头的位置的字符索引。例如:

IN legos, go

OUT 2

这种方法的问题是,我只能使用charAt类中的substringlengthString,而不能使用其他类方法

我目前没有代码,我需要了解如何启动它

编辑:感谢您的帮助,现在不是寻找第二个字符串开始位置的索引,而是想找到第二个字符串在第一个字符串的最右边区域开始的位置的索引。例如

IN:密西西比州,ss OUT:5

提前致谢

3 个答案:

答案 0 :(得分:1)

public int indexOf(final String source, final String find) {
    // loop from first character to last character that still leaves length of 'find' string available
    for(int sourcePos = 0; sourcePos < source.length() - find.length(); sourcePos++) {
        boolean found = true;
        for(int findPos = 0; findPos < find.length(); findPos++) {
            // if the current char is not a match, then mark as not found and break from loop
            if(source.charAt(sourcePos) != find.charAt(findPos)) {
                found = false;
                break;
            }
        }
        if(found) {
            return sourcePos;
        }
    }

    // return -1 to indicate the string was not found
    return -1;
}

答案 1 :(得分:0)

提示:说你的字符串是s1s2。按顺序尝试s1的每个索引,并在每个索引中查看是否存在s1长度为s2.length()的子字符串,该字符串正好是s2

答案 2 :(得分:0)

这是一种非常简单的方法,可以满足您的要求。首先编写main()方法来测试您的方法。我们称之为indexOf,因为这是我们要实现的功能。我们需要得到String(s)的长度,我建议我们在循环体之外做。然后,只要找到匹配的char,我们就需要一个内循环。如果第二个长度与内部循环索引匹配,则我们匹配并且return。最后,(如果没有找到匹配项)return -1喜欢

public static void main(String[] args) {
    System.out.println(indexOf("legos", "go"));
}

static int indexOf(String str, String toFind) {
    // Length of both String(s).
    int len = (str != null) ? str.length() : 0;
    int len2 = (toFind != null) ? toFind.length() : 0;

    for (int i = 0; i < len; i++) {
        int t = 0;
        while (str.charAt(i) == toFind.charAt(t) 
                && i < len && t < len2) {
            t++;
            i++;
        }
        i -= t; // <-- reset position to start of match finding position.
        if (t == len2) {
            return i; // <-- match found.
        }
    }
    // No match. Default return.
    return -1;
}

输出(按要求)

2