Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找字符串1中字符串2开始的索引_Java_String - Fatal编程技术网

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

Java 查找字符串1中字符串2开始的索引,java,string,Java,String,因此,我正在编写一个包含多个不同方法的程序,其中一个方法要求查找第二个字符串从第一个字符串开始的索引 该方法接受两个字符串作为参数,并返回第二个字符串从第一个字符串开始的位置的字符索引。例如: 在中:乐高积木,开始 OUT:2 这个方法的缺点是我只能使用String类中的charAt、substring和length,而不能使用其他类方法 我目前没有代码,我需要一个如何启动它的想法 编辑:感谢您的帮助,现在我不想寻找第二个字符串开始的索引,而是想在第一个字符串的最右侧区域找到第二个字符串开始的索

因此,我正在编写一个包含多个不同方法的程序,其中一个方法要求查找第二个字符串从第一个字符串开始的索引

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

中:
乐高积木,开始

OUT
2

这个方法的缺点是我只能使用
String
类中的
charAt
substring
length
,而不能使用其他类方法

我目前没有代码,我需要一个如何启动它的想法

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

在:密西西比州,ss 输出:5


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

公共int indexOf(最终字符串源,最终字符串查找){
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;
}
//从第一个字符到最后一个字符的循环,仍然保留“find”字符串的长度 对于(int sourcePos=0;sourcePos
这里有一个非常简单的方法,应该可以满足您的需求。首先编写一个
main()
方法来测试您的方法。我们称之为
indexOf
,因为这是我们要实现的函数。我们需要得到两个
字符串的长度,我建议我们在循环体之外进行。然后,只要找到匹配的
char
,我们就需要一个内部循环开始。如果第二个长度与内部循环索引匹配,则我们有一个匹配项并返回
。最后,(如果没有找到匹配项)
return-1
like

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;
}

正如我所理解的,例如,查找包含go的第二个单词?此方法应该查找字符串2的字符串1,并输出第二个字符串开始的第一个字符串的索引。如果您想要执行完全不同功能的代码,请问一个新问题。哦,好的,我不会使用
.equals()
那么我猜他必须使用charAt和for循环手动测试等式。这与我的答案有什么冲突?这个解决方案似乎对我有用,不过有一个问题,如果现在找到它的起点,我想找到它出现在最右边的位置,将第一个for循环更改为
for(int sourcePos=source.length()-find.length()-1;sourcePos>=0;sourcePos--){
2