String não substituindo caracteres

Eu tenho uma frase que é passada como uma string e eu estou fazendo uma substituição na palavra “e” e quero substituí-lo por “”. E não está substituindo a palavra “e” por espaço em branco. Abaixo está um exemplo da minha lógica. E quando eu depurar isso, a lógica cai na sentença.

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

Há algo que estou sentindo falta aqui?

E quando eu depurar isso, a lógica cai na sentença.

Sim e, em seguida, você descarta o valor de retorno.

Strings em Java são imutáveis ​​- quando você chama replace , ele não altera o conteúdo da string existente – ele retorna uma nova string com as modificações. Então você quer:

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

Isso se aplica a todos os methods em String ( substring , toLowerCase etc). Nenhum deles altera o conteúdo da string.

Note que você realmente não precisa fazer isso em uma condição – afinal, se a sentença não contiver "and" , não faz mal realizar a substituição:

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

As cordas são imutáveis , o que significa que seu conteúdo não pode mudar. Quando você chama de replace(this,that) você acaba com uma String totalmente nova. Se você quiser manter esta nova cópia, você precisa atribuí-la a uma variável. Você pode sobrescrever a referência antiga (a la sentence = sentence.replace(this,that) ou uma nova referência como visto abaixo:

 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 um aparte, note que eu removi a verificação contains() , pois é uma chamada desnecessária aqui. Se não contiver, a substituição falhará em fazer quaisquer substituições. Você só quer que isso contenha o método se o que você está substituindo for diferente da condição real que você está verificando.

Você não está fazendo nada com o valor de retorno de replace . Você precisará atribuir o resultado do método, que é o novo String :

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

Uma String é imutável em java. Métodos como replace retornam uma nova String .

Seu teste contains desnecessário: o replace apenas não funcionará se não houver instâncias do texto a serem substituídas.

Você deve reatribuir o resultado da substituição, assim:

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

Esteja ciente de que a class String é imutável , o que significa que todos os seus methods retornam uma nova string e nunca modificam a string original no local, portanto o resultado de invocar um método em uma instância de String deve ser atribuído a uma variável ou usado imediatamente para que a mudança entre em vigor.

 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