Вопрос-ответ

String replace method is not replacing characters

Метод замены строки не заменяет символы

У меня есть предложение, которое передается в виде строки, и я выполняю замену слова "и", и я хочу заменить его на " ". И это не замена слова "и" пробелом. Ниже приведен пример моей логики. И когда я отлаживаю это, логика действительно попадает в предложение.заменить.

String sentence = "Define, Measure, Analyze, Design and Verify"
if (sentence.contains("and")){
sentence.replace("and", " ");
}

Есть ли что-то, чего мне здесь не хватает?

Переведено автоматически
Ответ 1

И когда я отлаживаю это, логика действительно попадает в предложение.replace.


Да, и тогда вы отбрасываете возвращаемое значение.

Строки в Java неизменяемы - когда вы вызываете replace, это не изменяет содержимое существующей строки - это возвращает новую строку с изменениями. Итак, вы хотите:

sentence = sentence.replace("and", " ");

Это относится ко всем методам в String (substring, toLowerCase и т.д.). Ни один из них не изменяет содержимое строки.

Обратите внимание, что на самом деле вам не нужно делать это в условии - в конце концов, если предложение не содержит "and", выполнить замену не повредит:

String sentence = "Define, Measure, Analyze, Design and Verify";
sentence = sentence.replace("and", " ");
Ответ 2

Строки неизменяемы, что означает, что их содержимое не может измениться. При вызове replace(this,that) вы получаете совершенно новую строку. Если вы хотите сохранить эту новую копию, вам нужно присвоить ее переменной. Вы можете перезаписать старую ссылку (a la sentence = sentence.replace(this,that) или новую ссылку, как показано ниже:

public class Test{

public static void main(String[] args) {

String sentence = "Define, Measure, Analyze, Design and Verify";

String replaced = sentence.replace("and", "");
System.out.println(replaced);

}
}

В качестве отступа обратите внимание, что я удалил contains() проверку, поскольку здесь это ненужный вызов. Если он ее не содержит, replace просто не сможет произвести какие-либо замены. Вам нужен этот метод contains только в том случае, если то, что вы заменяете, отличается от фактического условия, которое вы проверяете.

Ответ 3

Вы ничего не делаете с возвращаемым значением replace. Вам нужно будет присвоить результат метода, который является новым String:

sentence = sentence.replace("and", " ");

A String является неизменяемым в java. Такие методы, как replace возвращают новый String.

Ваш contains тест не нужен: replace просто не будет работать, если нет экземпляров текста для замены.

Ответ 4

Вы должны повторно назначить результат замены, вот так:

 sentence = sentence.replace("and", " ");

Имейте в виду, что String класс является неизменяемым, что означает, что все его методы возвращают новую строку и никогда не изменяют исходную строку на месте, поэтому результат вызова метода в экземпляре String должен быть присвоен переменной или использован немедленно, чтобы изменение вступило в силу.

java string