CS学生在这里。像往常一样,我很困惑。我的任务是只使用.charAt()和.length()来搜索字符串中的子字符串(两者都由用户提供)。它应该返回的是字符串中子字符串的开始索引(如果根本不存在则为-1)。坦率地说,我不知道从哪里开始。我试图做类似以下的事情:
for (int i=0;i<string.length();i++)
if (string.charAt(i) == substring.charAt(i))
如果这是真的那么我想做一些事情,比如相应字符串中的下两个字符。我离开基地吗?关于如何开始的任何建议?
感谢阅读。
答案 0 :(得分:1)
如果您只允许使用charAt
和length
方法,则需要嵌套for循环。为了不破坏你的锻炼,我会尽我所能让你开始不为你做。
for(int i = 0; i < string.length(); i++)
for(int j = 0; j < substring.length(); j++)
我们在这里说的是对于字符串的每个索引,遍历子字符串的所有字符并执行某些操作。显然,你必须以某种方式比较角色。如果您通过整个子字符串并且字符匹配,那么您将要返回外部循环的计数,因为子字符串的起始位置。
如果你通过整个嵌套循环并且没有返回子字符串所在的索引,那么你想要返回-1。您在那里需要一个if
语句来提供该逻辑。如果您需要帮助,请评论!
答案 1 :(得分:1)
如果你只是想做一个天真的解决方案,你需要做的就是设置两个循环。一个for循环遍历字符串的位置,以及一个内部while循环,如果将子字符串的开头字符与字符串中的字符匹配,则可用于迭代查询和主字符串。您需要做的就是检查以确保不要超出主字符串,这可以通过适当的循环索引来完成。在内部while循环中,您可以使用外循环计数器和内循环计数器的组合进行必要的比较。
我没有包含代码,因为这是一个家庭作业,但你应该没事。
答案 2 :(得分:1)
没有测试:
private static final int indexOf(String string, String substring) {
outerloop: for (int i = 0; i < string.length() - substring.length(); i++) {
for (int j = 0; j < substring.length(); j++) {
if (substring.charAt(j) != string.charAt(i + j)) {
continue outerloop;
}
}
return i;
}
return -1;
}
答案 3 :(得分:1)
for (int i=0;i<string.length();i++){
if (string.charAt(i) == substring.charAt(i)){
int j = i+1;
int l =0;
while (l<substring.lenght && string.charAt(j) == substring.charAt(l)){
j++;i++;
} if (l=substring.lenght){
return i;
}
}
}
答案 4 :(得分:0)
很好的方法@rolfl。
为您的解决方案添加一小部分贡献:
当string等于substring时有一个小bug。它永远不会进入外环并且我们可以有string =“cat”和substring =“cat”所以indexOf应该是0。
修改outloop应该有效:i < s1.length() - (substring.length()-1)
@Test
public void test_firstSubstring(){
String s = "cat";
String p = "cat";
int actual = findFirstSubstring(s,p);
assertEquals(0,actual);
}
public static int findFirstSubstring(String s1, String substring){
if(s1.isEmpty() || substring.isEmpty() || substring.length() > s1.length()){
return -1;
}
outloop: for (int i = 0; i < s1.length() - (substring.length()-1) ; i++){
for (int j=0; j < substring.length(); j++){
if (s1.charAt(i+j) != substring.charAt(j)) {
continue outloop;
}
}
return i;
}
return -1;
}