Внедрите метод, который возвращает true, если конечные четыре символьные подстроки s1
и s2
равны. Если длина любой строки меньше 4, метод должен возвращать значение false.
Вы можете использовать метод s.substring(n, m)
который дает подстроку s
начинающуюся с индекса n
и заканчивающуюся индексом m-1
.
В качестве ответа я поставил следующий код, мне просто интересно, правильно ли я сделал это:
public static boolean compareLast4 (String s1, String s2) {
s1len = s1.length;
s2len = s2.length;
if (s1lan < 4 || s2len < 4)
return false;
for (int i = 0; i < s1len; i++)
if (s1.substring() - 4.equals(s2.length() - 4))
return true;
return false;
}
Я бы сделал что-то вроде:
public static boolean compareLast4 (String s1, String s2)
{
if (s1.length() < 4 || s2.length() < 4)
return false;
return s1.substring(s1.length() - 4).equals(s2.substring(s2.length()-4));
}
Игнорируя орфографическую ошибку s1lan
где переменная была бы s1len
, я считаю, что вы сделали почти все, чтобы исключить строки длиной менее 4 символов. Попробуйте вместо s1.length()
.
Что касается цикла for
, то (s1.substring() - 4.equals(s2.length() - 4))
находится дальше от метки, чем вы бы хотели.
Вы заметите, что s1.substring()
не определяет длину и возвращает String
, поэтому String - int
не имеет смысла. В пределах функции equals()
вас есть int - int
чтобы это было прекрасно, но опять-таки вы, вероятно, не сравниваете то, что вы намеревались.
(s1.substring(s1len - 4)).equals(s2.substring(s2len - 4))
будет ближе к вашему намерению, потому что это даст две подстроки.
Петля for
не затрагивает меня по мере необходимости в первую очередь. Как уже упоминалось здесь и здесь, когда вы выходите из экзамена, попробуйте его компилировать и исправить ошибки, когда вы их найдете. Написание теста помогает также, потому что вы сможете проверить, что он доставит вам то, что вы хотите.
Если вы посмотрите на JavaDocs, вы заметите, что существуют два метода substring
Для вашего случая, вам, вероятно, нужен только первый, например...
s1.substring(s1.length() - 4);
Вернет четыре последних символа String
. Вам просто нужно будет использовать ту же технику во второй String
и сравнить результаты
Я также не уверен, что пытается for-loop
...
public static boolean compareLast4(String one, String two){
if(one.length() != two.length() || one.length() < 4) return false;
one = one.substring(one.length()-4);
two = two.substring(two.length()-4);
return one.equals(two);
}
Может быть?
public static boolean compareLastFourCharacters(String first, String second) {
try {
first = first.substring(first.length() - 4);
return second.endsWith(first);
} catch (IndexOutOfBoundsException exception) {
return false;
}
}
Только в одной строке с использованием регулярного выражения :-)
return s1.length() >=4 && s2.length() >= 4 ? s1.matches(".*?" + s2.substring(s2.length()-4))
: false;