"I spent almost a year of my life working with The Phantom Duo," writes David B via the Submit to TDWTF Extension, "while their tenure resulted in a lot of headaches, a few lost jobs, and a multi-million dollar explosion, there was one positive result: lots and lots of bad code."
"At least, that's a good thing for me, since I haven't worked with the code in years: it's like I have my own, personal The Daily WTF archive on a flash drive. This particular method seemed worth sharing - I even added a few comments to help understand it."
/// <summary>
/// Called by MatchWord
/// </summary>
private bool ChangeWord(ref string str, bool checkCase, bool checkWholeWord, string strFind, string strReplace)
{
// declare a local that will be returned; it's prefered to use only one "return" statement, at the end
bool changed = false;
// create copies of some of the parameters; you can never have too many copies
string lStr;
string lStrFind;
// some people use caseSensitive or caseInsensitive... this is more clear
if (checkCase)
{
lStr = str;
lStrFind = strFind;
}
else
{
// case-insensitive change, convert to UPPERCASE, forget existence of other cultures
lStr = str.ToUpper();
lStrFind = strFind.ToUpper();
}
// by check whole word, I mean check entire string
if (checkWholeWord)
{
if (lStr == lStrFind)
{
str = strReplace;
changed = true;
}
}
else
{
// reinvent the wheel
int start = 0;
int index = 0;
while (start < lStr.Length && index >= 0)
{
index = lStr.IndexOf(lStrFind, start);
if (index >= 0)
{
str = str.Remove(index, strFind.Length);
str = str.Insert(index, strReplace);
changed = true; // unless strReplace == strFind
if (checkCase)
lStr = str;
else
lStr = str.ToUpper();
start = index + strReplace.Length;
}
}
}
return changed;
}