Как заменить несколько вхождений подстрок с помощью пользовательской функции c #? - PullRequest
1 голос
/ 12 июня 2011

Я написал код ниже, чтобы заменить строки, но казалось, что с кодом что-то не так.Он не мог заменить несколько раз.Это только может заменить первое вхождение.Предполагается заменить все вхождения.

// Не использовать 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 ]

5 голосов
/ 12 июня 2011

Ваша функция работает правильно, при условии, что вы хотите однопроходное (на подстроку) решение.

В вашем testDate отсутствуют & символов до amp;

Изменить на:

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

От:

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

Что такое однопроходное (на подстроку) решение?

  1. Изменяется каждое уникальное вхождение substring1.
  2. Затем изменяется каждое уникальное вхождение substring2.
  3. ...
  4. Затем изменяется каждое уникальное вхождение substringN.

Рекурсивная альтернатива

Рекурсивное решение будет включать следующее:

  1. После замены одной подстроки вы звонитеснова функция

  2. Если замен не произошло, верните строку

    public string ReplaceStuff(string MyStr) {   
      //Attempt to replace 1 substring
    
      if ( ReplacementOccurred ){
        return ReplaceStuff(ModifiedString);
      }else{
        return MyStr;
      } 
    }
    

Что вы получите с помощью рекурсии?

  • Ну, учитывая строку ввода: &amp;amp;, сначала она будет изменена на &amp;, затем следующий уровень рекурсии будет cпередайте его &.
  • Я, честно говоря, не думаю, что автор хочет рекурсивное решение, но я мог видеть, как могли бы прохожие.
1 голос
/ 12 июня 2011

Похоже, что класс HttpUtility будет лучшим выбором в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...