Это немного «семь раз отмерь», но то, что вы хотите сделать, это:
- Проверить индекс местоположения каждой строки в другую.
- Если (и только если) существует указатель, проверьте, соответствует ли подстрока от этого индексного пятна до конца.
- В противном случае верните значение false.
Если вы делаете какие-либо вычитания, вы не получите правильный размер подстроки; то есть, если вы вычтите длину строки, которую вы проверяете, вы получите только один символ.
public static boolean startOther(String left, String right) {
if (left == null || right == null || left.equals(right)) {
return false;
}
int rightSubstringInLeft = left.indexOf(right);
int leftSubstringInRight = right.indexOf(left);
if(rightSubstringInLeft != -1) {
return left.substring(rightSubstringInLeft).equals(right);
} else if(leftSubstringInRight != -1) {
return right.substring(leftSubstringInRight).equals(left);
} else {
return false;
}
}
Вот более оптимизированная форма того же кода, что указана в комментариях. По сути, это одно и то же, но вам не нужно выполнять другую проверку равенства подстроки, так как 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;
}
}
Подсказка: http://docs.oracle.com/javase/7/docs/api/java/lang/String. html # endsWith% 28java.lang.String% 29 –
Что касается ошибки: если a не содержит b, pos равно -1, и тогда вы делаете a.substring (len + 1), который, таким образом, запрашивает индекс из границ строки. Отладчик немедленно показал бы это. Вы должны научиться его использовать. –