Ошибка при проверке суффиксов слова в Java - PullRequest
0 голосов
/ 30 апреля 2020

Задача состоит в том, чтобы создать функцию, которая принимает две строки в качестве аргументов и возвращает true, если вторая строка является суффиксом первой. Мой код работал для всех тестовых случаев, кроме двух. Я не могу понять, где я иду не так.

Примеры:

isSuffix ("призвание", "-logy") ➞ false

isSuffix ("арахнофобия", "-фобия") ➞ true

Мой код:

    public static boolean isSuffix(String word, String suffix) {
    String suff = "";
    for(int i = 1; i < suffix.length(); i++)    suff += "" + suffix.charAt(i);

    for(int i = 0; i < suff.length(); i++){
        if(!(word.charAt(suff.length()-1-i) == suff.charAt(suff.length()-1-i))) return false;
    }

    return true;        
}

Тестовые случаи, которые я провалил:

@Test
public void test5() {
    assertThat(Program.isSuffix("arachnophobia", "-phobia"), is(true));
}

@Test
public void test6() {
    assertThat(Program.isSuffix("rhinoplasty", "-plasty"), is(true));
}

Ответы [ 4 ]

1 голос
/ 30 апреля 2020

Ваша функция довольно сложна, так как вы вводите буквы oop.

public static boolean isSuffix(String word, String suffix) {
    // Remove first character
    String suff = suffix.substring(1);
    // Get Suffix from word
    String wordEnding = word.substring(word.length()-suffix.legnth());

    // Compare
    if(wordEnding.compareTo(suff)==0){
      return true;
    }
    return false;
}
1 голос
/ 30 апреля 2020

Сначала, чтобы удалить гипс, просто используйте substring, делать конкатенацию строк в l oop не очень хорошая идея, давая String suff = suffix.substring(1)

Затем вы используете stuff.length вместо word.length(), что фактически дает

public static boolean isSuffix(String word, String suffix) {
    String suff = suffix.substring(1);
    for (int i = 0; i < suff.length(); i++) {
        if (!(word.charAt(word.length() - 1 - i) == suff.charAt(suff.length() - 1 - i))) {
            return false;
        }
    }
    return true;
}

И на самом деле вы можете просто substring из word с одинаковой длиной суффикса и проверить, равны ли они

public static boolean isSuffix(String word, String suffix) {
    String suff = suffix.substring(1);
    String wordSuffix = word.substring(word.length() - suff.length());
    return suff.equals(wordSuffix);
}

И даже лучше, используя .endsWith, но это предполагает, что вы можете использовать встроенные методы

public static boolean isSuffix(String word, String suffix) {
    return word.endsWith(suffix.substring(1));
}

Также этот код предполагает, что оба значения не равны NULL, и всегда есть дефис

1 голос
/ 30 апреля 2020

Вы можете использовать String.endsWith() и String.substring() для простого решения проблемы с минимальным кодом (после включенной проверки курса):

public static boolean isSuffix(String word, String suffix) {
    if(word == null || suffix == null) return false;
    if(suffix.length() <= 1 || !suffix.startsWith("-")) return false;

    return word.endsWith(suffix.substring(1));
}
0 голосов
/ 30 апреля 2020

word.charAt(suff.length()-1-i) должно быть word.charAt(word.length()-1-i)

Я только что понял это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...