Tengo una oración que se pasa como una cadena y estoy reemplazando la palabra "y" y quiero reemplazarla con "". Y no reemplaza la palabra "y" con espacios en blanco. A continuación se muestra 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í?
Respuestas:
Sí, y luego descarta el valor devuelto.
Las cadenas en Java son inmutables; cuando llama
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.). Ninguna 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 ningún daño realizar el reemplazo:String sentence = "Define, Measure, Analyze, Design and Verify"; sentence = sentence.replace("and", " ");
fuente
Las cadenas son inmutables , lo que significa que su contenido no puede cambiar. Cuando llamas
replace(this,that)
, terminas con un String totalmente nuevo. Si desea conservar esta nueva copia, debe asignarla a una variable. Puede sobrescribir la referencia anterior (a lasentence = 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 acotación al margen, tenga en cuenta que he eliminado el
contains()
cheque, ya que es una llamada innecesaria aquí. Si no lo contenía, el reemplazo simplemente no hará ningún reemplazo. Solo querrá ese método contiene si lo que está reemplazando fuera diferente de la condición real que está verificando.fuente
contains()
llamada la que estaba causando un problema, no lo estaba. Fue una llamada innecesaria, pero en realidad no causó ningún problema. El problema se debió a ignorar el valor de retorno dereplace
, que no se explica en absoluto en la respuesta.sentence.replace(" and", ",");
No está haciendo nada con el valor de retorno de
replace
. Deberá asignar el resultado del método, que es el nuevoString
:sentence = sentence.replace("and", " ");
A
String
es inmutable en java. Métodos comoreplace
devolver un nuevoString
.Su
contains
prueba es innecesaria:replace
simplemente no funcionará si no hay instancias del texto para reemplazar.fuente
Debería reasignar el resultado del reemplazo, así:
sentence = sentence.replace("and", " ");
Tenga en cuenta que la
String
clase es inmutable , lo que significa que todos sus métodos devuelven una nueva cadena y nunca modifican la cadena original en el lugar, por lo que el resultado de invocar un método en una instancia deString
debe asignarse a una variable o usarse inmediatamente para la cambiar para que surta efecto.fuente
package com.tulu.ds; public class EmailSecurity { public static void main(String[] args) { System.out.println(returnSecuredEmailID("[email protected]")); } 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; } }
fuente