Как вы получаете метод ToString StringBuilder, чтобы не экранировать escape-символы в строке? - PullRequest
4 голосов
/ 27 июля 2011

Благодаря NgM я использую StringBuilder в .NET 3.5 для поиска и экранирования специальных символов. Однако когда я использую метод ToString, он избегает escape-символов, что делает предыдущее упражнение бесполезным. Кто-нибудь знает, как это обойти?

Вот код:

    private String ParseAndEscapeSpecialChars(String input)
    {
        StringBuilder sBuilder = new StringBuilder(input);
        String output;
        String specialChars = @"([-\]\[<>\?\*\\\""/\|\~\(\)\#/=><+\%&\^\'])";
        Regex expression = new Regex(specialChars);

        if (expression.IsMatch(input))
        {
            sBuilder.Replace(@"\", @"\\");
            sBuilder.Replace(@"'", @"\'");                
        }

        output = sBuilder.ToString();
        return output;
    }

Вот результаты отладки:

input       "005 - SomeCompany's/OtherCompany's Support Center"
sBuilder    {005 - SomeCompany\'s/OtherCompany\'s Support Center}
output      "005 - SomeCompany\\'s/OtherCompany\\'s Support Center"

Ответы [ 2 ]

7 голосов
/ 27 июля 2011

StringBuilder не экранирует символы. ничего не делает ничего особенного или умного.Доллары до пончиков, вы просто видите это в отладчике, который показывает , показывает вам экранированную версию.

4 голосов
/ 27 июля 2011

Вы говорите, что ваши результаты отладки. Если под этим вы имеете в виду сам отладчик, изучая содержимое строки, наводя курсор на переменную или помещая ее в список наблюдения в VS, то дисплей отладчика будет избегать косых черт в его окнах / всплывающих подсказках. Однако, если вы действительно выведите строку в своем коде, вы увидите, что экранирования здесь нет - это просто «особенность» отладчика.

Попробуйте

System.Diagnostics.Debug.Writeline(myOutputVariable);

и посмотрите в окне вывода, чтобы увидеть «реальное» содержимое.

...