83

我有一个作为字符串传入的句子,我正在替换单词“and”,我想用“”替换它。它并没有用空格替换“和”这个词。下面是我的逻辑的一个例子。当我调试这个时,逻辑确实落入了 sentence.replace 中。

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

有什么我在这里想念的吗。

4

5 回答 5

176

当我调试这个时,逻辑确实落入了 sentence.replace 中。

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

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

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

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

请注意,您实际上并不需要在条件中执行此操作 - 毕竟,如果句子包含"and",则执行替换没有害处:

String sentence = "Define, Measure, Analyze, Design and Verify";
sentence = sentence.replace("and", " ");
于 2012-10-04T19:46:08.317 回答
69

字符串是不可变的,这意味着它们的内容不能改变。当你打电话给你时,你replace(this,that)会得到一个全新的字符串。如果要保留此新副本,则需要将其分配给变量。您可以覆盖旧参考(sentence = sentence.replace(this,that)如下所示的 la 或新参考:

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()支票,因为这是一个不必要的电话。如果它不包含它,则替换将无法进行任何替换。如果您要替换的内容与您正在检查的实际条件不同,您只需要包含方法。

于 2012-10-04T19:47:29.300 回答
9

您没有对 . 的返回值做任何事情replace。您需要分配方法的结果,即新的String

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

AString在 java 中是不可变的。方法如replace返回一个新的String.

您的contains测试是不必要的:replace如果没有要替换的文本实例,则不会执行任何操作。

于 2012-10-04T19:46:21.410 回答
8

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

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

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

于 2012-10-04T19:46:21.720 回答
-1
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;
    }   
}
于 2018-05-05T02:21:36.373 回答