我有一个以字符串形式传入的句子,我正在对“和”这个词进行替换,我想用“”替换它。它并没有用空格替换“和”这个词。以下是我的逻辑示例。当我调试它时,逻辑确实属于sentence.replace。
String sentence = "Define, Measure, Analyze, Design and Verify"
if (sentence.contains("and")){
sentence.replace("and", " ");
}
我在这里缺少什么。
答案 0 :(得分:164)
当我调试它时,逻辑确实属于sentence.replace。
是的,然后您丢弃返回值。
Java中的字符串是不可变的 - 当您调用replace
时,它不会更改现有字符串的内容 - 它会返回 new 字符串修改。所以你想要:
sentence = sentence.replace("and", " ");
这适用于所有字符串(substring
,toLowerCase
等)中的方法。 无它们会改变字符串的内容。
请注意,您并不需要在某种情况下执行此操作 - 毕竟,如果句子不包含"and"
,则执行替换不会造成任何损害:
String sentence = "Define, Measure, Analyze, Design and Verify";
sentence = sentence.replace("and", " ");
答案 1 :(得分:68)
字符串不可变,意味着它们的内容无法更改。当你致电replace(this,that)
时,你最终会得到一个全新的字符串。如果要保留此新副本,则需要将其分配给变量。您可以覆盖旧引用(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()
支票,因为这是一个不必要的电话。如果它不包含它,则替换将无法进行任何替换。如果要替换的内容与您正在检查的实际条件不同,则只需要包含方法。
答案 2 :(得分:9)
您没有使用replace
的返回值执行任何操作。您需要分配方法的结果,即新的String
:
sentence = sentence.replace("and", " ");
String
在java中是不可变的。像replace
这样的方法会返回一个新的String
。
您的contains
测试是不必要的:如果不是要替换的文本实例,则replace
将禁止操作。
答案 3 :(得分:8)
您应该重新分配替换结果,如下所示:
sentence = sentence.replace("and", " ");
请注意,String
类是immutable,这意味着其所有方法都会返回一个新字符串,并且永远不会修改原始字符串,因此结果调用String
实例中的方法必须分配给变量或立即使用以使更改生效。
答案 4 :(得分:0)
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;
}
}