Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串替换方法未替换字符_Java_String_Replace - Fatal编程技术网

Java 字符串替换方法未替换字符

Java 字符串替换方法未替换字符,java,string,replace,Java,String,Replace,我有一个作为字符串传入的句子,我正在对单词“and”进行替换,我想用“”替换它。它并没有用空白代替“和”。下面是我的逻辑示例。当我调试这个时,逻辑确实会落在句子中。替换 String sentence = "Define, Measure, Analyze, Design and Verify" if (sentence.contains("and")){ sentence.replace("and", " "); } 这里有我遗漏的东西吗 当我调试这个时,逻辑确实会落在句子中。替换

我有一个作为字符串传入的句子,我正在对单词“and”进行替换,我想用“”替换它。它并没有用空白代替“和”。下面是我的逻辑示例。当我调试这个时,逻辑确实会落在句子中。替换

String sentence = "Define, Measure, Analyze, Design and Verify"
if (sentence.contains("and")){
    sentence.replace("and", " ");
}
这里有我遗漏的东西吗

当我调试这个时,逻辑确实会落在句子中。替换

String sentence = "Define, Measure, Analyze, Design and Verify"
if (sentence.contains("and")){
    sentence.replace("and", " ");
}
是,然后放弃返回值

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

sentence = sentence.replace("and", " ");
这适用于字符串中的所有方法(
substring
toLowerCase
等)。它们都不会更改字符串的内容

请注意,您实际上不需要在某个条件下执行此操作-毕竟,如果句子中不包含
和“
”,则执行替换操作没有坏处:

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

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

sentence = sentence.replace("and", " ");
字符串在java中是不可变的。像
replace
这样的方法返回一个新的
String


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

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

 sentence = sentence.replace("and", " ");
请注意,
String
类是,这意味着它的所有方法都返回一个新字符串,并且从不修改原始字符串,因此在
String
实例中调用方法的结果必须分配给变量或立即使用,以使更改生效。

字符串是不可变的,意味着它们的内容不能改变。当您调用
replace(这个,那个)
时,您将得到一个全新的字符串。如果要保留此新副本,需要将其分配给变量。您可以覆盖旧引用(la
句子=句子。替换(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()
检查,因为这是一个不必要的调用。如果它不包含它,则替换将无法进行任何替换。如果要替换的内容与要检查的实际情况不同,则只需要该包含方法。

package com.tulu.ds;
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;
    }   
}
公共类电子邮件安全{ 公共静态void main(字符串[]args){ System.out.println(ReturnSecuredEmail(“sample717@gmail.com")); } 私有静态字符串ReturnSecuredEmail(字符串电子邮件){ String str=email.substring(1,email.lastIndexOf(“@”)-1); 返回email.replaceAll(email.substring(1,email.lastIndexOf(“@”)-1),replacewith(str.length(),“*”); } 私有静态字符串替换为(int-length,字符串替换){ 字符串finalStr=“”;
对于(int i=0;iStrings是不可变的。我必须在回答dup时给你打电话,而不是投票结束。这个问题以前已经被问过很多次了-怎么回事,Jon?@MattBall虽然这个问题被反复问过,但我认为这是一个更好的答案,IHMO@MattBall当前位置正如经常发生的那样,我发现试一试更快od,完整的答案,而不是找到一个同样有好答案的副本。我相信(承认有点自私)我在这里的答案比你找到的副本中被接受的答案更好,这甚至没有真正的技术意义。(“你需要让你的字符串实际上等于你对字符串所做的更改”-什么?)此外,我想指出不需要首先检查遏制的方面。有时间考虑后,我觉得这是一个更好的答案。我的遏制逻辑是必要的,因为有些情况下我不想替换它。逻辑与此不完全一样,我只是以此为例。@MarkBasler:你的contain您提供的示例不需要逻辑,因此您不应该包含它。好的问题应该只包含他们需要显示问题的内容-通过包含在您提供的情况下毫无意义的代码,您为问题添加了干扰。我关心的是包含,我关心的是替换。顺便说一下,您将其视为重复并回答它。保持优雅。嗨@MarkBasler:我正试图提供帮助。我看不出这两个操作有冲突:你的问题是一个非常常见的问题,总是被问到:java字符串是不可变的。当我将一个问题标记为重复时,我试图在这里提高问题和答案的质量,但在sa我的时间,在给你的问题留下一个具体的答案时,我希望能为你提供更直接的帮助,具体到你的例子。你可能会发现有用的。字符串应该是不可变的,但是字符串库中有一些bug,允许你修改原始字符串。@MarkBasler:嗯,你到底在说什么bug?如果你是awar的话因为字符串是不可变的,所以不清楚为什么您希望您的代码能够工作……这个答案的文本意味着它是
contains()
导致问题的呼叫-不是。这是一个不必要的呼叫,但实际上没有引起任何问题。问题是由于忽略了
replace
的返回值,这在回答中根本没有解释。@Jon.Skeet先生,如果回答中的文本暗示了相反的意思,我真的很抱歉……但是当我说不是必需的,我的意思是它没有必要……好吧,我会在答案中包含这一点,使其更加明显……如果您使用
语句,不是更好吗
@JonSkeet和其他人-我添加了一个段落,实际上解释了发生的事情,并将误导性的文字移到了结尾,因为这对于手头的真正问题来说是多余的。@corsiKa:我会的