簡體   English   中英

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

[英]Searching a string for a substring using charAt

CS學生在這里。 像往常一樣,我很困惑。 我的任務是只使用.charAt()和.length()來搜索字符串中的子字符串(兩者都由用戶提供)。 它應該返回的是字符串中子字符串的開始索引(如果根本不存在則為-1)。 坦率地說,我不知道從哪里開始。 我試圖做類似以下的事情:

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

如果那是真的那么我想做一些事情,比如相應字符串中的下兩個字符。 我離開基地嗎? 關於如何開始的任何建議?

謝謝閱讀。

如果您只允許使用charAtlength方法,則需要嵌套for循環。 為了不破壞你的運動,我會盡我所能讓你開始不為你做這件事。

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

我們在這里說的是對於字符串的每個索引,遍歷子字符串的所有字符並執行某些操作。 顯然你將不得不以某種方式比較角色。 如果通過整個子字符串並且字符匹配,則需要返回outter循環的計數,因為這是子字符串的開始位置。

如果通過整個嵌套循環並且沒有返回子字符串所在的索引,則需要返回-1。 你需要一個if語句來提供那個邏輯。 如果您需要幫助,請評論!

如果你只是想要做一個天真的解決方案,你需要做的就是設置兩個循環。 一個for循環遍歷字符串的位置,以及一個內部while循環,如果將子字符串的開頭字符與字符串中的字符匹配,則可用於迭代查詢和主字符串。 您需要做的就是檢查以確保不要超出主字符串,這可以通過適當的循環索引來完成。 在內部while循環中,您可以使用外循環計數器和內循環計數器的組合進行必要的比較。

我沒有包含代碼,因為這是一個家庭作業,但你應該沒事。

沒有測試:

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

也許像這樣的東西可以工作,我現在無法測試,但我認為這不是一個壞主意。

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

很好的方法@rolfl。 為您的解決方案添加一小部分貢獻:當string等於substring時,存在一個小錯誤。 它永遠不會進入外環並且我們可以有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;
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM