[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 220
  • Last Modified:

Best way for this string.replace?

hoi all...
i have a string with some placeholders in it. this string is added to a StringBuilder in a loop. While adding it, i replace each placeholder with another stirng. currently it looks like this:
-----------
.... loop start...
listCode.Append(forumTemplate.getLoopCode().Replace(
    "[forumSubject]", forumSubject).Replace(
    stringPlaceholderOne, oneTopic.getReplyCount().ToString()).Replace(
    "[countViews]", oneTopic.getViewCount().ToString()).Replace(
    "[lastPostAuthor]", oneTopic.getLastPostAuthorNick()).Replace(
    "[lastPostDate]", oneTopic.getLastPostDateFormatted())
);
... loop end...
-----------

the code above has a problem:
If a placeholder variable ("stringPlaceholderOne") is an empty string (length=0), then the .Replace() throws an exception.

Question:
What is the best way to handle this?
I thought about a simple code like this:
-----------
static public string replaceInString(string inString, string inFind, string inReplaceWith) {
   if (inString.IndexOf(inFind) >= 0) {
      return inString.Replace(inFind, inReplaceWith);
   } else {
      return inString;
   }
}
-----------

But I believe there are better ways to do it... e.g. extend the normal string with my own replace method?
is this possible? how?
any other idea?

Thank you
0
Smoerble
Asked:
Smoerble
  • 3
  • 3
  • 2
2 Solutions
 
eternal_21Commented:
Why would "stringPlaceholderOne" be null?
0
 
eternal_21Commented:
Or, sorry: An empty string?
0
 
eternal_21Commented:
Oh - my apologies again!  I understand the problem now...  Unfortunately you cannot extend (inherit from) the System.String or System.Text.StringBuilder classes, as they are sealed.
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
SmoerbleAuthor Commented:
Hi again.
For clarification:
There might be the following case:
stringPlaceholderOne = "";

In this case, teh string.Replace() crashes.

So, if you say, I can't extend the string class... any idea, what else I could do to get it really fast done?
Thx
0
 
AvonWyssCommented:
Well, it does make sense that you cannot use "" as search pattern for replacements.

Try this: before the call, make sure that stringPlaceholderOne is not empty. I'd suggest this workaround:

if (stringPlaceholderOne.Length==0)
    stringPlaceholderOne=Guid.NewGuid().ToString();

Then it will work as expected, since the placeHolderOne will not be ampty, but will contain a pattern which will certainly not appear in the string to be replaced.
0
 
AvonWyssCommented:
Also, it may be worth checking your code for a more efficient solution like this, which can handle any placeholder in square brackets:

uses System.Text.RegularExpressions;

....
      private string ReplacePlaceholder(Match match) {
            switch (match.Groups["placeholder"].Value) {
            case "forumSubject":
                  return forumSubject;
            case "countViews":
                  return oneTopic.getViewCount().ToString();
            case "lastPostAuthor":
                  return oneTopic.getLastPostAuthorNick();
            case "lastPostDate":
                  return oneTopic.getLastPostDateFormatted();
            default:
                  if (match.Value==stringPlaceholderOne) {
                        return oneTopic.getReplyCount().ToString();
                  }
            }
            return match.Value; // set this to "" if you want all undknown placeholders to be deleted
      }

....
            listCode.Append(Regex.Replace(forumTemplate.getLoopCode(), @"\[(?<placeholder>[^\]]*)\]", new MatchEvaluator(ReplacePlaceholder)));

0
 
SmoerbleAuthor Commented:
This is a perfect solution, thank you!
Unfortunatly I can't give your more points than 500 total :(

Thanks again (sorry for the delay with the points).
0
 
AvonWyssCommented:
Tanks for grading the question!
0

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

  • 3
  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now