我正在尝试在不使用内置方法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()
方法的最佳方法是什么?
我一直在尝试角色阵列,但还没有运气。字符串会更容易吗?
答案 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)
这就是我要做的事情:
String.startsWith
输出2. 答案 4 :(得分:1)
一种方式是这样的:
suffix <= str
。n
获取str
n = suffix.length()
的最后substring()
个字符{/ 1}}。suffix
与equals()
或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
,等等。所以:
stringLength - 2
。如果是,您可以str
return false
表示我们想要查看的权利中有多少个字符i
for(int i = 0; i < suffix.length(); ++i)
。如果它们相等,则继续下一次迭代return false
中的所有字符(即,如果循环结束),则返回true。全部放在一起:
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
甚至更低,这将引发异常!还有其他方法可以解决这个问题,但我会留给你找到它们。 :)