我目前正在爲一個類創建一個項目,以創建一個TextLine類,該類表示必須表示爲一個字符數組的文本行。我不允許通過間接或直接以任何方式使用字符串類來表示TextLine對象,但是,我可以使用它來處理參數。允許indexOf在Java中多次檢查匹配
對於其中一種方法,我應該將一個字符串作爲參數的參數,它也是TextLine對象的一個片段,然後返回此片段中第一次出現片段的索引位置TextLine或-1,如果找不到片段。
現在,我試圖找出indexOf方法,但我的問題是,我的方法只檢查一次起點。因此,如果TextLine對象的字母第一次與該片段的字母不匹配,但在對象的其他位置存在另一個匹配,則該方法不會檢查該起始點。
例如,假設我輸入penplay作爲TextLine,然後我輸入play作爲片段。顯然,在TextLine中發生了遊戲,但是我的indexOf方法所做的是,它在索引0處檢查來自penplay的第一個p,然後繼續查看以下字母是否與遊戲長度匹配,並且如果它不,它返回-1。任何想法如何讓算法繼續尋找另一個起點?
這就是我對我的代碼:
public int indexOf(String fragment){
char[] temp = fragment.toCharArray();
int j = 0;
for(int i = 0; i < someText.length; i++){
while(someText[i] == temp[j]){
for(j = 1; j < temp.length; j++){
if(temp[j] != someText[i+j]){
return -1;
}
}
return i;
}
}
return -1;
}
你自己的問題應該避讓你:「允許算法繼續搜索」意味着你需要另一個循環,因爲答案提示。最簡單的,即使不是最乾淨的形式也只是一個嵌套在for中嵌套的for。 –
給出的答案看起來都可以接受,但您可能想花幾分鐘時間學習Boyer-Moore字符串搜索算法。這是相當簡單的,很快做這種事情:http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm –
@Kevin偉大的鏈接!很有意思。 –