你怎么得到StringBuilder的ToString方法来逃避字符串中的转义字符?

时间:2011-07-27 17:27:07

标签: c# stringbuilder

感谢NgM,我在.NET 3.5中使用StringBuilder来查找和转义特殊字符。但是,当我使用ToString方法时,它会逃脱转义字符,然后使前一个练习变得无用。有谁知道怎么解决这个问题?

以下是代码:

    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 个答案:

答案 0 :(得分:7)

StringBuilder不会转义字符。它没有没有特别或聪明。您在调试器中看到这些甜甜圈的美元, 会向您显示转义版本。

答案 1 :(得分:4)

你说你的结果来自调试。如果您指的是调试器本身,通过将鼠标悬停在变量上或将其放在VS中的监视列表中来检查字符串内容,则调试器显示将在其窗口/工具提示中转义斜杠。但是,如果您实际在代码中输出字符串,您将看到转义不存在 - 它只是一个调试器“功能”。

尝试

System.Diagnostics.Debug.Writeline(myOutputVariable);

并查看输出窗口以查看“真实”内容。