如何使用自定义c#函数替换多次出现的子字符串?

时间:2011-06-12 19:10:07

标签: c# string

我编写了下面的代码来替换字符串,但似乎代码有问题。它无法多次替换。它只能替换第一次出现。它假设要替换所有出现的事件。

//不要使用System.Security.SecurityElement.Escape。我正在为多个.NET版本编写此代码。

public string UnescapeXML(string s)
{
    if (string.IsNullOrEmpty(s)) return s;
    return s.Replace("&amp;", "&").Replace("&apos;", "'").Replace("&quot;", "\"").Replace("&gt;", ">").Replace("&lt;", "<");
}

protected void Page_Load(object sender, EventArgs e)
{

    string TestData="TestData&amp;amp;amp;";
    Response.Write("using function====>>>>" + UnescapeXML(TestData));
    Response.Write("\n\n<BR>Not using function====>>>>" + TestData.Replace("&amp;", ""));

}

2 个答案:

答案 0 :(得分:5)

假设您需要一次通过(每子字符串)解决方案,您的功能正常运行。

您的testDate在&

之前缺少amp;个字符

更改为:

string TestData="TestData&amp;&amp;&amp;";

自:

string TestData="TestData&amp;amp;amp;";

什么是一次通过(每子字符串)解决方案?

  1. 每个唯一的substring1出现都会更改。
  2. 然后,每个唯一的substring2发生更改。
  3. ...
  4. 然后,每个唯一的substringN出现都会发生变化。
  5. 递归替代

    递归解决方案将涉及以下内容:

    1. 在替换单个子字符串后,再次调用该函数

    2. 如果没有发生替换,请返回字符串

      public string ReplaceStuff(string MyStr) {   
        //Attempt to replace 1 substring
      
        if ( ReplacementOccurred ){
          return ReplaceStuff(ModifiedString);
        }else{
          return MyStr;
        } 
      }
      
    3. 你对Recursion有什么看法?

      • 好吧,给定一个输入字符串:&amp;amp;,它首先会更改为&amp;,然后下一级递归会将其更改为&
      • 老实说,我不认为作者想要递归解决方案,但我可以看到路人可能会如何。

答案 1 :(得分:1)

在这种情况下,看起来HttpUtility类将是最佳选择。