車輪がどのように機能するかを理解するために車輪を再発明しようとしているので (これは悪いことではありません!)、部分文字列 + を使用するのは少しチートのように思えequals
ますね。に渡すのではなく、チェックを直接実装しないのはなぜequals
ですか?
基本的な考え方は、各文字列の最後の文字を比較し、次に 2 番目から最後まで、次に 3 番目から最後までというように比較することです。比較が等しくない場合は、false を返すことができます。それ以外の場合は、true を返すことができます。つまり、2 つの文字列を 1 文字ずつペアにします。そして、これらのペアがすべて等しいかどうかを尋ねるのではなく、それらのいずれかが等しくないかどうかを尋ねます。
intを指定すると、 を介して「右からi -i番目のインデックスi
」を取得できます。たとえば、最後の桁は、最後から 2 番目の桁はなどです。stringLength - 1 - i
stringLength - 1
stringLength - 2
- 接尾辞が より長いかどうかを確認してください
str
。もしそうなら、あなたはすることができますreturn false
i
見たい右から何文字かを表しましょう
- サフィックス内の右からi -i番目のすべての文字を調べるループを作成します。
for(int i = 0; i < suffix.length(); ++i)
- 上記のように、各反復内で、両方の文字列の右からi -i番目の文字を取得します
- それらが等しくない場合、
return false
. 等しい場合は、次の反復に進みます
- すべての文字を使い果たした場合
suffix
(つまり、ループが終了した場合)、true を返します。
すべてを一緒に入れて:
public static boolean endsWithSuffix(String str, String suffix) {
int strLen = str.length();
int suffixLen = suffix.length();
if (suffixLen > strLen)
return false;
for (int i = 0; i < suffixLen; ++i) {
char strChar = str.charAt(strLen - 1 - i);
char suffixChar = suffix.charAt(suffixLen - 1 - i);
if (strChar != suffixChar)
return false
}
return true
}
の最初のチェックsuffixLen > strLen
は単なる最適化ではなく、正確さのために必要です。それ以外の場合、接尾辞が str よりも長い場合、ループは必要以上に長くなり、それよりstr.charAt(-1)
も低くなり、例外が発生します! この問題を解決する方法は他にもありますが、それらを見つける方法はあなたに任せます。:)