字符串替换方法不替换字符

2022-08-31 12:10:43

我有一个作为字符串传入的句子,我正在对单词“and”进行替换,我想将其替换为“ ”。它不是用空格代替“和”这个词。以下是我的逻辑示例。当我调试它时,逻辑确实落入句子.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 (等) 中的所有方法。它们都不会更改字符串的内容。substringtoLowerCase

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

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

答案 2

字符串是不可变的,这意味着它们的内容不能更改。当你打电话时,你最终会得到一个全新的字符串。如果要保留此新副本,则需要将其赋给变量。您可以覆盖旧引用(la 或新引用,如下所示: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()