我有一个作为字符串传递的句子,我正在将单词 "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)
时,你得到一个全新的字符串。如果你想保留这个新拷贝,你需要将它赋值给一个变量。你可以覆盖旧的引用(类似于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()
检查,因为这里它是一个不必要的调用。如果它没有包含它,那么替换将无法进行任何替换。只有当你要替换的内容与你正在检查的实际条件不同时,才需要使用contains方法。contains()
调用是引起问题的原因,但实际上不是。这是一个不必要的调用,但它并没有导致任何问题。问题是由于忽略了replace
的返回值而造成的,在该答案中根本没有解释这一点。 - Jon Skeetsentence.replace(" and", ",");
,会不会更好呢? - Khaled.K您没有对replace
的返回值进行任何操作。您需要将该方法的结果赋值给新的String
:
sentence = sentence.replace("and", " ");
在Java中,String
是不可变的。例如像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;
}
}