У меня есть предложение, которое передается как строка, и я заменяю слово "и", и я хочу заменить его на "". И это не заменяет слово "и" пробелом. Ниже приведен пример моей логики. И когда я отлаживаю это, логика попадает в предложение. Replace.
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()
, так как здесь ненужный вызов. Если он не содержит его, заменитель просто не сможет выполнить какие-либо замены. Вам нужно только, чтобы в нем содержался метод, если то, что вы заменяете, отличается от фактического состояния, которое вы проверяете.
Ответ 3
Вы ничего не делаете с возвращаемым значением replace
. Вам нужно будет назначить результат метода, который является новым String
:
sentence = sentence.replace("and", " ");
A String
является неизменным в java. Такие методы, как replace
, возвращают новый String
.
Тест contains
не нужен: replace
будет просто no-op, если нет экземпляров текста для замены.
Ответ 4
Вы должны повторно назначить результат замены, например:
sentence = sentence.replace("and", " ");
Имейте в виду, что класс String
immutable, что означает, что все его методы возвращают новую строку и никогда не изменяют оригинал строка на месте, поэтому результат вызова метода в экземпляре String
должен быть присвоен переменной или использоваться немедленно, чтобы изменения вступили в силу.
Ответ 5
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;
}
}