[SalesForce] Problem using string replace method

I'm attempting to replace a portion of a large text area using the code below without success. Have I misunderstood the proper usage of the string replace method, and if so, is there another methodology I should be using instead? I'll add that I've verified that the data is valid.

for(Event ev:Evt){
    Descrip = ev.Description;
    // oEvtOwners is a map of WhatID to the old OwnerID
    // nEvtOwners is a map of WhatID to new OwnerID

    system.debug(string.valueOf(oEvtOwnrs.get(ev.WhatID)); // old event owner name

    system.debug(string.valueOf(nEvtOwnrs.get(ev.WhatID)); // new event owner name

    system.debug(Descrip.contains(string.valueOf(oEvtOwnrs.get(ev.WhatID)))==true);

    if(Descrip.contains(string.valueOf(oEvtOwnrs.get(ev.WhatID)))==true){

       Descrip.replace(string.valueOf(oEvtOwnrs.get(ev.WhatID))), string.valueOf(nEvtOwnrs.get(ev.WhatID)));

       /* if true, replace old owner string with new owner string anyplace in Descrip */

    }

    system.debug(Descrip); // old owner is still there, not the new owner!!!

    ev.Description = Descrip;

    ev.OwnerID = nEvtOwnrs.get(ev.WhatID); // new owner applied as expected!!!  

    Evnt.add(ev);            

    } // end for e:Evt

update Evnt;

As you can see from the comments in the code, the old ownerID is being updated to the new ownerID just before the update is performed, but the string code isn't updating the Description string/textArea from what I'm seeing in the debug logs.

This is happening even though the old owner and the new owner values along with the Descrip.contains are all evaluating properly in the system.debug statements. As such, I don't understand why the Descrip.replace(oldstring,newstring) isn't working! Any insights or suggestions?

Best Answer

Strings are immutable which means that they cannot be modified. When you call an instance operation on a String it creates a new String instance to return.

You need to assign the result to another variable (or to the variable itself).

For example:

Descrip = Descrip.replace(string.valueOf(oEvtOwnrs.get(ev.WhatID))), string.valueOf(nEvtOwnrs.get(ev.WhatID)));