[英]String replace method is not replacing characters
我有一个作为字符串传入的句子,我正在替换单词“and”,我想用“”替换它。 它并没有用空格代替“and”这个词。 下面是我的逻辑示例。 当我调试它时,逻辑确实落入了sentence.replace。
String sentence = "Define, Measure, Analyze, Design and Verify"
if (sentence.contains("and")){
sentence.replace("and", " ");
}
有什么我在这里想念的吗。
当我调试它时,逻辑确实落入了sentence.replace。
是的,然后您丢弃返回值。
Java 中的字符串是不可变的——当你调用replace
,它不会改变现有字符串的内容——它返回一个带有修改的新字符串。 所以你要:
sentence = sentence.replace("and", " ");
这适用于 String 中的所有方法( substring
、 toLowerCase
等)。 它们都不会更改字符串的内容。
请注意,您实际上不需要在条件下执行此操作 - 毕竟,如果句子不包含"and"
,则执行替换没有害处:
String sentence = "Define, Measure, Analyze, Design and Verify";
sentence = sentence.replace("and", " ");
字符串是不可变的,这意味着它们的内容不能改变。 当您调用replace(this,that)
您最终会得到一个全新的字符串。 如果要保留这个新副本,则需要将其分配给一个变量。 您可以覆盖旧参考(a 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()
检查,因为它在这里是不必要的调用。 如果它不包含它,则替换将无法进行任何替换。 如果您要替换的内容与您正在检查的实际情况不同,您只想要包含方法。
你没有对replace
的返回值做任何事情。 您需要分配该方法的结果,即新的String
:
sentence = sentence.replace("and", " ");
String
在java中是不可变的。 像replace
这样的方法返回一个新的String
。
您的contains
测试是不必要的:如果没有要替换的文本实例,则replace
将无操作。
您应该重新分配替换的结果,如下所示:
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.