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