字符串不替换字符

时间:2012-10-04 19:45:13

标签: java string replace

我有一个以字符串形式传入的句子,我正在对“和”这个词进行替换,我想用“”替换它。它并没有用空格替换“和”这个词。以下是我的逻辑示例。当我调试它时,逻辑确实属于sentence.replace。

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

我在这里缺少什么。

5 个答案:

答案 0 :(得分:164)

  

当我调试它时,逻辑确实属于sentence.replace。

是的,然后您丢弃返回值。

Java中的字符串是不可变的 - 当您调用replace时,它不会更改现有字符串的内容 - 它会返回 new 字符串修改。所以你想要:

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

这适用于所有字符串(substringtoLowerCase等)中的方法。 它们会改变字符串的内容。

请注意,您并不需要在某种情况下执行此操作 - 毕竟,如果句子包含"and",则执行替换不会造成任何损害:

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

答案 1 :(得分:68)

字符串不可变,意味着它们的内容无法更改。当你致电replace(this,that)时,你最终会得到一个全新的字符串。如果要保留此新副本,则需要将其分配给变量。您可以覆盖旧引用(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()支票,因为这是一个不必要的电话。如果它不包含它,则替换将无法进行任何替换。如果要替换的内容与您正在检查的实际条件不同,则只需要包含方法。

答案 2 :(得分:9)

您没有使用replace的返回值执行任何操作。您需要分配方法的结果,即新的String

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

String在java中是不可变的。像replace这样的方法会返回一个新的String

您的contains测试是不必要的:如果不是要替换的文本实例,则replace将禁止操作。

答案 3 :(得分:8)

您应该重新分配替换结果,如下所示:

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

请注意,String类是immutable,这意味着其所有方法都会返回一个新字符串,并且永远不会修改原始字符串,因此结果调用String实例中的方法必须分配给变量或立即使用以使更改生效。

答案 4 :(得分:0)

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