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;
}