У меня есть предложение, которое передается в виде строки, и я заменяю слово «и», и я хочу заменить его на «». И это не замена слова «и» на пробел. Ниже приведен пример моей логики. И когда я отлаживаю это, логика попадает в предложение .replace.
String sentence = "Define, Measure, Analyze, Design and Verify"
if (sentence.contains("and")){
sentence.replace("and", " ");
}
Что-то мне здесь не хватает.
Ответы:
Да, а потом отбрасываете возвращаемое значение.
Строки в Java неизменяемы - когда вы вызываете
replace
, он не меняет содержимое существующей строки - он возвращает новую строку с изменениями. Итак, вы хотите:sentence = sentence.replace("and", " ");
Это относится ко всем методам в String (
substring
иtoLowerCase
т. Д.). Ни один из них не меняет содержимое строки.Обратите внимание, что вам не обязательно делать это в условии - в конце концов, если предложение не содержит
"and"
, выполнение замены не повредит:String sentence = "Define, Measure, Analyze, Design and Verify"; sentence = sentence.replace("and", " ");
источник
Строки неизменяемы , то есть их содержимое не может измениться. Когда вы звоните,
replace(this,that)
вы получаете совершенно новую строку. Если вы хотите сохранить эту новую копию, вам нужно присвоить ее переменной. Вы можете перезаписать старую ссылку (а-ля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()
чек, так как здесь нет необходимости. Если он не содержал его, при замене не будет никаких замен. Вам нужно, чтобы он содержал метод, только если то, что вы заменяете, отличалось от фактического состояния, которое вы проверяете.источник
contains()
проблема возникла из-за звонка, но это не так. Это был ненужный звонок, но на самом деле он не вызвал никаких проблем. Проблема заключалась в игнорировании возвращаемого значенияreplace
, которое вообще не объясняется в ответе.sentence.replace(" and", ",");
Вы ничего не делаете с возвращаемым значением
replace
. Вам нужно будет назначить результат метода, который является новымString
:sentence = sentence.replace("and", " ");
A
String
неизменен в java. Такие методы, какreplace
возврат новогоString
.Ваш
contains
тест не нужен:replace
просто не будет работать, если нет экземпляров текста для замены.источник
Вам следует переназначить результат замены, например:
sentence = sentence.replace("and", " ");
Имейте в виду, что
String
класс является неизменным , что означает, что все его методы возвращают новую строку и никогда не изменяют исходную строку на месте, поэтому результат вызова метода в экземпляреString
должен быть назначен переменной или немедленно использован для изменения вступят в силу.источник
package com.tulu.ds; public class EmailSecurity { public static void main(String[] args) { System.out.println(returnSecuredEmailID("sample717@gmail.com")); } private static String returnSecuredEmailID(String email){ String str=email.substring(1, email.lastIndexOf("@")-1); return email.replaceAll(email.substring(1, email.lastIndexOf("@")-1),replacewith(str.length(),"*")); } private static String replacewith(int length,String replace) { String finalStr=""; for(int i=0;i<length;i++){ finalStr+=replace; } return finalStr; } }
источник