私は現在、文字の配列として表す必要があるテキスト行を表す TextLine クラスを作成するクラスのプロジェクトに取り組んでいます。文字列クラスを間接的または直接的に使用して TextLine オブジェクトを表現することは許可されていませんが、それを使用してパラメーターを操作することはできます。
メソッドの 1 つは、TextLine オブジェクトのフラグメントでもあるパラメーターの引数として文字列を受け取り、この TextLine でフラグメントが最初に出現したインデックス位置を返すことになっています。フラグメントが見つからない場合は 1。
今、私は indexOf メソッドを理解しようとしていますが、私の問題は、私のメソッドが開始点を一度しかチェックしないことです。そのため、TextLine オブジェクトの文字が最初はフラグメントの文字と一致せず、オブジェクト内の別の場所で別の一致がある場合、メソッドはその開始点をチェックしません。
たとえば、テキストラインとして penplay を入力し、フラグメントとして 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;
}