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


У меня есть предложение, которое передается в виде строки, и я делаю заменить на слово "и" и я хочу заменить его на " ". И это не замена слова " и " пробелом. Ниже приведен пример моей логики. И когда я отлаживаю это, логика действительно попадает в предложение.заменять.

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

есть ли что-то, что я упускаю здесь.

5 74

5 ответов:

и когда я отлаживаю это логика действительно попадает в предложение.заменять.

Да, а затем вы отбрасываете возвращаемое значение.

строки в Java неизменяемы - при вызове replace, это не меняет содержание существующей string-возвращает a новая строка с изменениями. Итак, вы хотите:

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

это относится к все методы в строку (substring,toLowerCase etc). нет из них изменить содержимое строки.

обратите внимание, что вам действительно не нужно делать это в состоянии - в конце концов, если предложение не содержат "and", это не вредит выполнять замену:

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

строки неизменяемые, что означает, что их содержание не может измениться. Когда вы звоните replace(this,that) вы получаете совершенно новую строку. Если вы хотите сохранить эту новую копию, вы должны присвоить его переменной. Вы можете перезаписать старую ссылку (а-ля 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() проверьте, так как это ненужный вызов здесь. Если он не содержал его, замена просто не сможет сделать какой-либо замены. Вы бы только хотели, чтобы это содержало метод, если то, что вы заменяете, отличалось от фактического состояния, которое вы проверяете.

вы ничего не делаете с возвращаемым значением replace. Вам нужно будет назначить результат метода, который является новым String:

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

A String является неизменяемым в java. Такие методы, как replace вернуть String.

код contains тест не нужен:replace будет просто no-op, если там не экземпляры текста для замены.

вы должны повторно назначить результат замены, например:

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

имейте в виду, что String класс неизменяемые, что означает все его методы возвращают новую строку и никогда не изменяют исходную строку на месте, поэтому результат вызова метода в экземпляре String должно быть присвоено переменной или использоваться немедленно для вступления изменения в силу.

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