Java String.replace() - заменяет больше, чем просто указанную мной подстроку?

В соответствии с этой проблемой CodingBat я пытаюсь сделать следующее:

Для данной строки, если первый или последний символы - "x", вернуть строку без этих символов "x", а в противном случае вернуть строку без изменений.

Мой код:

public String withoutX(String str) {
    if (str.startsWith("x")) {
        str = str.replace(str.substring(0, 1), "");
    }
    if (str.endsWith("x")) {
        str = str.replace(str.substring(str.length()-1), "");
    }
    return str;
}

Этот код заменяет ВСЕ x символы в строке, а не только первый и последний. Почему это происходит, и что было бы хорошим способом решить это?

3 ответа

Решение

Из СДК для replace метод:

Возвращает новую строку, полученную в результате замены всех вхождений oldChar в этой строке на newChar.

Вы можете решить это без замены:

public String withoutX(String str) {   
    if (str == null) { 
        return null;
    }

    if (str.startsWith("x")) {
        str = str.substring(1);
    }
    if (str.endsWith("x")) {
        str = str.substring(0, str.length()-1);
    }

    return str;
}

Вы могли бы использовать string.replaceAll функция.

string.replaceAll("^x|x$", "");

Приведенный выше код заменит x который был в начале или в конце. Если нет x в начале или в конце оригинальная строка вернется без изменений.

Вы можете использовать replaceFirst для первого символа или подстроку обеих сторон на 1 символ

public static String withoutX(String str) {
        if (str.startsWith("x")) {
            str = str.replaceFirst("x", "");
        }
        if (str.endsWith("x")) {
            str = str.substring(0,str.length() - 1);
        }

        return str;
    }
Другие вопросы по тегам