La cadena no reemplaza los caracteres

Tengo una oración que se transmite como una cadena y estoy reemplazando la palabra “y” y quiero reemplazarla por “”. Y no reemplaza la palabra “y” con espacios en blanco. A continuación hay un ejemplo de mi lógica. Y cuando depuro esto, la lógica cae en la oración.

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

¿Hay algo que me falta aquí?

Y cuando depuro esto, la lógica cae en la oración.

Sí, y luego descarta el valor de retorno.

Las cadenas en Java son inmutables: cuando llama a replace , no cambia el contenido de la cadena existente , devuelve una nueva cadena con las modificaciones. Entonces quieres:

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

Esto se aplica a todos los métodos en String ( substring , toLowerCase , etc.). Ninguno de ellos cambia el contenido de la cadena.

Tenga en cuenta que realmente no necesita hacer esto en una condición – después de todo, si la oración no contiene "and" , no hace daño realizar el reemplazo:

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

Las cadenas son inmutables , lo que significa que su contenido no puede cambiar. Cuando llamas a replace(this,that) terminas con un String totalmente nuevo. Si desea conservar esta nueva copia, debe asignarla a una variable. Puede sobreescribir la referencia anterior (a la sentence = sentence.replace(this,that) o una nueva referencia como se ve a continuación:

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

Como nota adicional, tenga en cuenta que he eliminado el control contains() , ya que es una llamada innecesaria aquí. Si no lo contiene, el reemplazo simplemente no hará ningún reemplazo. Solo querrá que contenga el método si lo que está reemplazando es diferente a la condición real que está comprobando.

No está haciendo nada con el valor de retorno de replace . Deberá asignar el resultado del método, que es el nuevo String :

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

Una String es inmutable en Java. Los métodos como replace devuelven un nuevo String .

Su prueba contains es innecesaria: replace simplemente no-operativa si no hay instancias del texto para reemplazar.

Deberías volver a asignar el resultado del reemplazo, así:

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

Tenga en cuenta que la clase String es inmutable , lo que significa que todos sus métodos devuelven una nueva cadena y nunca modifican la cadena original in situ, por lo que el resultado de invocar un método en una instancia de String debe asignarse a una variable o utilizarse de inmediato. para que el cambio surta efecto

 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