Метод замены строк не заменяет символы

У меня есть предложение, которое передается как строка, и я заменяю слово "и", и я хочу заменить его на "". И это не заменяет слово "и" пробелом. Ниже приведен пример моей логики. И когда я отлаживаю это, логика попадает в предложение. 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("[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;
    }   
}