我有一个以字符串形式传递的句子,我正在对单词“ and”进行替换,我想用“”替换它。并且它不是用空格替换“和”一词。以下是我的逻辑示例。而且,当我调试该逻辑时,它的逻辑确实落入了句子。
String sentence = "Define, Measure, Analyze, Design and Verify"
if (sentence.contains("and")){
sentence.replace("and", " ");
}
这里有我想念的东西吗?
Answers:
而且,当我调试该逻辑时,它的逻辑确实落入了句子。
是的,然后您放弃返回值。
Java中的字符串是不可变的-当您调用时replace
,它不会更改现有字符串的内容-它会返回经过修改的新字符串。所以你要:
sentence = sentence.replace("and", " ");
这适用于所有的字符串(方法substring
,toLowerCase
等等)。它们都不更改字符串的内容。
请注意,您实际上并不需要在某种情况下执行此操作-毕竟,如果该句子不包含"and"
,执行替换也不会造成损害:
String sentence = "Define, Measure, Analyze, Design and Verify";
sentence = sentence.replace("and", " ");
字符串是不可变的,这意味着它们的内容不能更改。调用时,replace(this,that)
您将得到一个全新的String。如果要保留此新副本,则需要将其分配给变量。您可以覆盖旧参考(lasentence = 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()
是引起问题的电话-并非如此。这是不必要的电话,但实际上并没有引起任何问题。问题是由于忽略的返回值replace
,答案中根本没有解释。
sentence.replace(" and", ",");
您对返回值没做任何事情replace
。您需要分配方法的结果,这是新的String
:
sentence = sentence.replace("and", " ");
String
在Java中A是不可变的。像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;
}
}