Search code examples
c#replacestringbuilder

Why am I getting unexpected results with StringBuilder and .replace?


I'm trying to find specific criteria (dogsWildcard, catsWildcard, birdsWildcard) in a string (wildCard) and then modify the string so it has a number associated with the criteria.

For example, I want the cold below to return: "*DOGS 111 *CATS 222 *BIRDS 333"

However, it's returning something that looks like: "*CATS *DOGS 222 *BIRDS*DOGS 111 *EVENTS *BIRDS*BIRDS *DOGS *CATS 333"


public string ProcessMerchantRefNbr()
{
var wildCard = "*DOGS *CATS *BIRDS";

string catsWildcard = "*CATS";
string dogsWildcard = "*DOGS";
string birdsWildcard = "*BIRDS";

var dogId = "111";
var catId = "222";
var birdId = "333";

var strMerchantRefNbr = new StringBuilder();

if (wildCard.Contains(catsWildcard)) strMerchantRefNbr.Append($"{catsWildcard} {wildCard.Replace(catsWildcard, catId)}");

if (wildCard.Contains(dogsWildcard)) strMerchantRefNbr.Append($"{dogsWildcard} {wildCard.Replace(dogsWildcard, dogId)}");

if (wildCard.Contains(birdsWildcard)) strMerchantRefNbr.Append($"{birdsWildcard} {wildCard.Replace(birdsWildcard, birdId)}");

return strMerchantRefNbr.ToString()
}

What am I doing wrong?


Solution

  • Simply you don't need the Replace.

    var strMerchantRefNbr = new StringBuilder();
    
    if (wildCard.Contains(catsWildcard)) strMerchantRefNbr.Append($"{catsWildcard} {catId} ");
    if (wildCard.Contains(dogsWildcard)) strMerchantRefNbr.Append($"{dogsWildcard} {dogId} ");
    if (wildCard.Contains(birdsWildcard)) strMerchantRefNbr.Append($"{birdsWildcard} {birdId} ");
    
    // strMerchantRefNbr.ToString(): *CATS 222 *DOGS 111 *BIRDS 333