我正在编写一个方法,如果其中一个字符串出现在另一个字符串的最后,并且字符串不同,则返回true。我们不能使用endsWith()
例如:
如果a =" all"并且b =" ball",该方法将返回true。
如果a ="是"并且b ="是",该方法将返回false。
这是我到目前为止所做的,但它一直说字符串索引超出范围= -1
public static boolean startOther(String a, String b){
if(a.equals(b))
return false;
int pos=a.indexOf(b);
int pos1=b.indexOf(a);
int len=a.length();
int len1=b.length();
if(pos>-1 && a.substring(len-pos).equals(b)|| pos1>-1 && b.substring(len1-pos1).equals(a))
return true;
return false;
}
答案 0 :(得分:2)
这有点“在你跳跃之前看”,但你想要做的是:
如果你进行任何类型的减法,你将不会得到正确的子串大小;也就是说,如果你减去你要检查的字符串的长度,你只会得到一个字符。
lastIndexOf
这是评论中指出的相同代码的更优化形式。从根本上说它是相同的,但你不需要对子字符串执行另一个等号检查,因为public static boolean startOther(String left, String right) {
if (left == null || right == null || left.equals(right)) {
return false;
}
int rightSubstringInLeft = left.lastIndexOf(right);
int leftSubstringInRight = right.lastIndexOf(left);
if(rightSubstringInLeft != -1) {
return rightSubstringInLeft == left.length() - right.length();
} else if(leftSubstringInRight != -1) {
return leftSubstringInRight == right.length() - left.length();
} else {
return false;
}
}
只会给你整个子字符串的最后一个索引。
store_PL
答案 1 :(得分:2)
length()
和regionMatches(int toffset, String other, int ooffset, int len)
的组合应该非常有效:
public static boolean startOther(final String a, final String b) {
final int aLength = a.length();
final int bLength = b.length();
return aLength != bLength && (aLength > bLength ? a.regionMatches(aLength - bLength, b, 0, bLength)
: b.regionMatches(bLength - aLength, a, 0, aLength));
}
答案 2 :(得分:1)
由于您无法使用 int state = (mode) ? View.VISIBLE : View.GONE;
l.btn1.setVisibility(state);
l.btn2.setVisibility(state);
l.btn3.setVisibility(state);
l.btn4.setVisibility(state);
}
,因此请先对endsWith
进行测试。然后得到长度。测试它们不一样。检查{0}的indexOf + length是否相等。像
null
我测试过
true
并获得(请求的)输出
public static boolean startOther(String a, String b) {
if (a == null || b == null) return false;
int aLen = a.length();
int bLen = b.length();
if (aLen != bLen) {
if (aLen < bLen) {
int p = b.indexOf(a);
return p != -1 && p + aLen == bLen;
} else {
int p = a.indexOf(b);
return p != -1 && p + bLen == aLen;
}
}
return false;
}
答案 3 :(得分:1)
indexOf(String s)
<强>返回:强> 指定子字符串第一次出现的索引,如果没有这种情况,则为-1。
如果indexOf()
返回-1并且您致电a.substring(len-pos)
,则参数将为len - (-1) = len + 1
。这是out of range
的原因。
这种情况总是在你的代码中发生,因为有两条镜像线:
int pos=a.indexOf(b);
int pos1=b.indexOf(a);
如果在方法调用之前检查了equals,则pos
之一将始终为-1。很明显:如果一个字符串包含另一个字符串,并且它们不相等,则第二个字符串不包含第一个字符串。