Java 使用charAt在字符串中搜索子字符串

Java 使用charAt在字符串中搜索子字符串,java,string,search,charat,Java,String,Search,Charat,这里是CS学生。像往常一样,我很困惑。我的任务是仅使用.charAt()和.length()在字符串中搜索子字符串(两者都由用户提供)。它应该返回字符串中子字符串的开始索引(如果它根本不存在,则返回-1)。坦率地说,我不知道从哪里开始。我尝试了如下操作: for (int i=0;i<string.length();i++) if (string.charAt(i) == substring.charAt(i)) for(int i=0;i如果只允

这里是CS学生。像往常一样,我很困惑。我的任务是仅使用.charAt()和.length()在字符串中搜索子字符串(两者都由用户提供)。它应该返回字符串中子字符串的开始索引(如果它根本不存在,则返回-1)。坦率地说,我不知道从哪里开始。我尝试了如下操作:

        for (int i=0;i<string.length();i++)
            if (string.charAt(i) == substring.charAt(i))

for(int i=0;i如果只允许使用
charAt
length
方法,那么您将需要一个嵌套的for循环。为了不破坏您的练习,我将尽我所能让您开始,而不必为您这样做

for(int i = 0; i < string.length(); i++)
    for(int j = 0; j < substring.length(); j++)
for(int i=0;i
这里我们要说的是,对于字符串的每个索引,遍历子字符串的所有字符并执行一些操作。显然,您必须以某种方式比较字符。如果您遍历整个子字符串并匹配字符,您将希望返回outter循环的计数,因为这是他开始说话


如果您完成了整个嵌套循环,并且没有返回子字符串所在位置的索引,那么您需要返回-1。您需要在其中使用
If
语句来提供该逻辑。如果您需要帮助,请进行注释!

如果您只允许使用
charAt
length 方法。为了不破坏你的锻炼,我会尽我所能让你在不为你做的情况下开始锻炼

for(int i = 0; i < string.length(); i++)
    for(int j = 0; j < substring.length(); j++)
for(int i=0;i
这里我们要说的是,对于字符串的每个索引,遍历子字符串的所有字符并执行一些操作。显然,您必须以某种方式比较字符。如果您遍历整个子字符串并匹配字符,您将希望返回outter循环的计数,因为这是他开始说话


如果您完成了整个嵌套循环,并且没有返回子字符串所在位置的索引,那么您需要返回-1。您需要在其中使用
If
语句来提供该逻辑。如果您需要帮助,请进行注释!

如果您只需要执行一个简单的解决方案,那么您需要做的就是设置两个循环。一个循环用于itera检查字符串的位置,如果子字符串的开始字符与字符串中的字符相匹配,则可以使用内部while循环来迭代查询和主字符串。只需检查以确保不超出主字符串,这可以通过适当的for循环索引来完成在内部while循环中,您可以使用外部循环计数器和内部循环计数器的组合来进行必要的比较


我没有包括代码,因为这是一个家庭作业,但从这里开始你应该会很好。

如果你只是想做一个简单的解决方案,你所需要做的就是设置两个循环。一个是for循环来迭代字符串的位置,另一个是内部while循环,如果你需要,它可以用来迭代查询和主字符串将子字符串的起始字符与字符串中的字符匹配。您需要做的只是检查以确保未超出主字符串,这可以通过适当的for循环索引来完成。在内部while循环中,您可以使用外部循环计数器和内部循环计数器的组合,以使e必要的比较

我没有包括代码,因为这是一个家庭作业,但从这里开始你应该会很好。

没有测试:

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;
}
private static final int indexOf(字符串、字符串子字符串){
outerloop:for(int i=0;i
未经测试:

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;
}
private static final int indexOf(字符串、字符串子字符串){
outerloop:for(int i=0;i
也许像这样的东西可以工作,我现在无法测试,但我认为这是个不错的主意

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

对于(int i=0;i也许类似的东西可以工作,我现在不能测试它,但我认为这不是一个坏主意

   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;
                      }
                 }
      }
for(int i=0;iNice approach@rolfl。
为您的解决方案添加一小部分内容:
当string等于substring时有一个小错误。它永远不会进入外部循环,我们可以使用string=“cat”和substring=“cat”,因此indexOf应该为0。
修改输出循环应该有效:
i

@测试
公共无效测试_firstSubstring(){
字符串s=“cat”;
字符串p=“cat”;
int实际值=findFirstSubstring(s,p);
资产质量(0,实际);
}
公共静态int-findFirstSubstring(字符串s1,字符串子字符串){
如果(s1.isEmpty()|| substring.isEmpty()| | substring.length()>s1.length()){
返回-1;
}
outloop:for(int i=0;i
不错的方法@rolfl。 为您的解决方案添加一小部分内容: 当字符串等于子字符串时有一个小错误。它永远不会进入