1

String.endsWith()組み込みメソッドを使用せずにメソッドを実装しようとしていますString.endsWith()

これが私のコードです:

public static boolean endsWithSuffix(String str, String suffix) {
    char[] chStr = str.toCharArray();
    char[] chSuf = suffix.toCharArray();

    if(!str.contains(suffix) {
        return false;
    }
    return true;
}

endsWith()組み込みメソッドを使用せずにメソッドを実装する最良の方法は何ですか?

文字配列を試してみましたが、まだ運がありません。文字列の方が簡単ですか?

4

8 に答える 8

2

1 つの方法は次のようになります。

  • かどうかを確認しますsuffix <= str
  • を使用して、 whereの最後のn文字を取得します。strn = suffix.length()substring()
  • 文字列のその部分suffixequals()またはと比較しequalsIgnoreCase()ます。
于 2013-04-16T00:44:53.230 に答える
2
    return str.length() >= suffix.length() && str.substring(str.length() - suffix.length()) == suffix;

.equals を使用できますが、無効チェックを追加する必要があります

于 2013-04-16T00:46:54.413 に答える
2
public static boolean endsWith(String test, String suffix) {

    int start = test.length() - suffix.length();
    if (start >= 0) {
        return test.indexOf(suffix, start) >= 0;
    }
    return false;
}

public static void main(String... args) {

    System.out.println(endsWith("aaabbbccc", "aaa"));
    System.out.println(endsWith("aaabbbccc", "bbb"));
    System.out.println(endsWith("aaabbbccc", "ccc"));
    System.out.println(endsWith("Hello Java", "Java"));
}

出力

false
false
true
true
于 2013-04-16T00:47:35.887 に答える
2
    public static boolean endsWith(String str, String suffix){  
        return (str.lastIndexOf(suffix) == str.length() - suffix.length()); 
    }  

    public static void main(String[] args) {
        System.out.println(endsWith("this is a test", "test")); //True
        System.out.println(endsWith("This is another test", "test2"));  //False
    }
于 2013-04-16T00:47:54.520 に答える
1

これが私がすることです:

  1. 入力文字列を逆にする
  2. 接尾辞文字列を逆にします
  3. 1.String.startsWithの出力が2.の出力かどうかを確認します。
于 2013-04-16T00:44:25.497 に答える
1

車輪がどのように機能するかを理解するために車輪を再発明しようとしているので (これは悪いことではありません!)、部分文字列 + を使用するのは少しチートのように思えequalsますね。に渡すのではなく、チェックを直接実装しないのはなぜequalsですか?

基本的な考え方は、各文字列の最後の文字を比較し、次に 2 番目から最後まで、次に 3 番目から最後までというように比較することです。比較が等しくない場合は、false を返すことができます。それ以外の場合は、true を返すことができます。つまり、2 つの文字列を 1 文字ずつペアにします。そして、これらのペアがすべて等しいかどうかを尋ねるのではなく、それらのいずれかが等しくないかどうかを尋ねます


intを指定すると、 を介して「右からi -i番目のインデックスi」を取得できます。たとえば、最後の桁は、最後から 2 番目の桁はなどです。stringLength - 1 - istringLength - 1stringLength - 2

  1. 接尾辞が より長いかどうかを確認してくださいstr。もしそうなら、あなたはすることができますreturn false
  2. i見たい右から何文字かを表しましょう
  3. サフィックス内の右からi -i番目のすべての文字を調べるループを作成します。for(int i = 0; i < suffix.length(); ++i)
  4. 上記のように、各反復内で、両方の文字列の右からi -i番目の文字を取得します
  5. それらが等しくない場合、return false. 等しい場合は、次の反復に進みます
  6. すべての文字を使い果たした場合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)も低くなり、例外が発生します! この問題を解決する方法は他にもありますが、それらを見つける方法はあなたに任せます。:)

于 2013-04-16T02:05:15.340 に答える
1

文字列の Substring メソッドを試すことができます

public static boolean endsWithSuffix(String str, String suffix) 
{
int a,b;
a=str.length();
b=suffix.length();
if (str.subString(b-a,a).equals(suffix))
   return true;
else 
   return false;

}

于 2013-04-16T00:49:42.533 に答える