Java-код - Сравнение последних 4 букв

1

Внедрите метод, который возвращает 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;
}
  • 1
    Вы пытались скомпилировать это? Получение ошибки при компиляции - довольно хороший намек, что вы сделали это неправильно :)
  • 1
    Я не думаю, что это компилируется :), "if (s1.substring () - 4.equals (s2.length () - 4))" правильно?
Показать ещё 3 комментария
Теги:

6 ответов

1
Лучший ответ

Я бы сделал что-то вроде:

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));
}
  • 0
    спасибо за конкретный ответ (я просто ненавижу получать общий ответ). Думаю, я допустил несколько небольших ошибок, но в целом надеюсь, что получу по крайней мере 5 из 10 баллов, поскольку во время экзамена я ответил точно так, как набирал текст прямо сейчас, но я тайно знал, что я делаю что-то неправильно, но не был так уверен, точно, что не так.
3

Игнорируя орфографическую ошибку 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 не затрагивает меня по мере необходимости в первую очередь. Как уже упоминалось здесь и здесь, когда вы выходите из экзамена, попробуйте его компилировать и исправить ошибки, когда вы их найдете. Написание теста помогает также, потому что вы сможете проверить, что он доставит вам то, что вы хотите.

3

Если вы посмотрите на JavaDocs, вы заметите, что существуют два метода substring

Для вашего случая, вам, вероятно, нужен только первый, например...

s1.substring(s1.length() - 4);

Вернет четыре последних символа String. Вам просто нужно будет использовать ту же технику во второй String и сравнить результаты

Я также не уверен, что пытается for-loop...

1
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);
}
  • 0
    Если длина одной из строк меньше 4, метод должен вернуть false.
  • 0
    В исходной задаче никогда не говорится, что строки должны быть одинакового размера, поэтому ваш "if (one.length ()! = Two.length ()) return false;" блок неправильный Кроме того, вы в конечном итоге возвращаете one.equals (two), несмотря ни на что, в то время как он должен возвращать false, если либо меньше 4 (вы на самом деле не проверяете это).
Показать ещё 3 комментария
0

Может быть?

public static boolean compareLastFourCharacters(String first, String second) {
    try {
        first = first.substring(first.length() - 4);
        return second.endsWith(first);
    } catch (IndexOutOfBoundsException exception) {
        return false;
    }
}
0

Только в одной строке с использованием регулярного выражения :-)

return  s1.length() >=4 && s2.length() >= 4 ? s1.matches(".*?" + s2.substring(s2.length()-4))
                                            : false;
  • 0
    спасибо за ответ, но я изучаю Java с использованием BlueJ в универе, и все же я ценю ваш ответ.
  • 0
    Метод match (regex) является частью стандартного Java API, вы можете использовать его даже с BlueJ.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню