I have a sentence that is passed in as a string and I am doing a replace on the word "and" and I want to replace it with " ". And it's not replacing the word "and" with white space. Below is an example of my logic. And when I debug this the logic does fall into the sentence.replace.
String sentence = "Define, Measure, Analyze, Design and Verify"
if (sentence.contains("and")){
sentence.replace("and", " ");
}
Is there something I am missing here.
Yes, and then you discard the return value.
Strings in Java are immutable - when you call
replace
, it doesn't change the contents of the existing string - it returns a new string with the modifications. So you want:This applies to all the methods in String (
substring
,toLowerCase
etc). None of them change the contents of the string.Note that you don't really need to do this in a condition - after all, if the sentence doesn't contain
"and"
, it does no harm to perform the replacement:You should re-assign the result of the replacement, like this:
Be aware that the
String
class is immutable, meaning that all of its methods return a new string and never modify the original string in-place, so the result of invoking a method in an instance ofString
must be assigned to a variable or used immediately for the change to take effect.You aren't doing anything with the return value of
replace
. You'll need to assign the result of the method, which is the newString
:A
String
is immutable in java. Methods likereplace
return a newString
.Your
contains
test is unnecessary:replace
will just no-op if there aren't instances of the text to replace.Strings are immutable, meaning their contents cannot change. When you call
replace(this,that)
you end up with a totally new String. If you want to keep this new copy, you need to assign it to a variable. You can overwrite the old reference (a lasentence = sentence.replace(this,that)
or a new reference as seen below:As an aside, note that I've removed the
contains()
check, as it is an unnecessary call here. If it didn't contain it, the replace will just fail to make any replacements. You'd only want that contains method if what you're replacing was different than the actual condition you're checking.