如何在不使用Java中的内置方法.endsWith()的情况下实现String.endsWith()

时间:2013-04-16 00:38:41

标签: java string ends-with

我正在尝试在不使用内置方法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()方法的最佳方法是什么?

我一直在尝试角色阵列,但还没有运气。字符串会更容易吗?

8 个答案:

答案 0 :(得分:2)

    return str.length() >= suffix.length() && str.substring(str.length() - suffix.length()) == suffix;

您可以使用.equals但是必须添加无效检查

答案 1 :(得分: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

答案 2 :(得分: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
    }

答案 3 :(得分:1)

这就是我要做的事情:

  1. 反转输入字符串
  2. 反转后缀String
  3. 检查输出1. String.startsWith输出2.

答案 4 :(得分:1)

一种方式是这样的:

  • 检查suffix <= str
  • 使用n获取str n = suffix.length()的最后substring()个字符{/ 1}}。
  • suffixequals()equalsIgnoreCase()的字符串部分进行比较。

答案 5 :(得分: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;

}

答案 6 :(得分:1)

请尝试以下操作。

public static boolean endsWithSuffix(String str, String suffix)     
    int offset = str.length - suffix.length();
    if (offset >= 0) {
        String temp = str.substring(offset, str.length() - 1);
        if (suffix.equals(temp)) {
            return true;
        }
    }
    return false;
}

答案 7 :(得分:1)

因为你试图重新发明轮子是为了弄清楚轮子是如何工作的(这不是坏事!),使用子串+ {{1}似乎有点作弊不是吗?为什么不直接执行检查,而不是将其传递给equals

基本思路是比较每个字符串的最后一个字符,然后是倒数第二个字符,然后是倒数第三个字符,等等。如果你得到不相等的比较,你可以返回false。否则,您可以返回true。换句话说,你逐个字符地配对两个字符串;而不是问这些对是否相等,你会问他们中的任何一个是否 un -equal。


给定一个int equals,您可以通过i从右边获取“ i -ith索引”。例如,最后一位是stringLength - 1 - i,倒数第二位是stringLength - 1,等等。所以:

  1. 检查后缀是否长于stringLength - 2。如果是,您可以str
  2. return false表示我们想要查看的权利中有多少个字符
  3. 创建一个循环,在后缀的右侧查看所有 i -ith chars:i
  4. 在每次迭代中,如右图所示,从右侧获取 i -ith char,如上所述
  5. 如果他们不平等,for(int i = 0; i < suffix.length(); ++i)。如果它们相等,则继续下一次迭代
  6. 如果你已经用尽return false中的所有字符(即,如果循环结束),则返回true。
  7. 全部放在一起:

    suffix

    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 } 的初始检查不仅仅是优化 - 它是正确性所必需的。否则,如果后缀长于str,那么循环将足够远,你将要求suffixLen > strLen甚至更低,这将引发异常!还有其他方法可以解决这个问题,但我会留给你找到它们。 :)