【问题标题】:Fix string for JavaScript in C#修复 C# 中 JavaScript 的字符串
【发布时间】:2011-06-17 03:40:22
【问题描述】:

我有一个函数可以在 C# 中为 JavaScript 修复不可打印的字符。但它的工作非常缓慢!如何提高这个功能的速度?

private static string JsStringFixNonPrintable(string Source)
    {
        string Result = "";
        for (int Position = 0; Position < Source.Length; ++Position)
        {
            int i = Position;
            var CharCat = char.GetUnicodeCategory(Source, i);
            if (Char.IsWhiteSpace(Source[i]) ||
                CharCat == System.Globalization.UnicodeCategory.LineSeparator ||
                CharCat == System.Globalization.UnicodeCategory.SpaceSeparator) { Result += " "; continue; }
            if (Char.IsControl(Source[i]) && Source[i] != 10 && Source[i] != 13) continue;
            Result += Source[i];
        }
        return Result;
    }

【问题讨论】:

标签: c# string


【解决方案1】:

我已经使用 StringBuilder 类重新编码了您的代码 sn-p,具有 预定义的缓冲区大小...这比您的示例快得多。

    private static string JsStringFixNonPrintable(string Source)
    {
        StringBuilder builder = new StringBuilder(Source.Length); // predefine size to be the same as input
        for (int it = 0; it < Source.Length; ++it)
        {
            var ch = Source[it];
            var CharCat = char.GetUnicodeCategory(Source, it);
            if (Char.IsWhiteSpace(ch) ||
                CharCat == System.Globalization.UnicodeCategory.LineSeparator ||
                CharCat == System.Globalization.UnicodeCategory.SpaceSeparator) { builder.Append(' '); continue; }
            if (Char.IsControl(ch) && ch != 10 && ch != 13) continue;
            builder.Append(ch);
        }
        return builder.ToString();
    }

【讨论】:

    【解决方案2】:

    尝试使用System.Text.StringBuilder,而不是连接到字符串,它在内部维护一个字符缓冲区并且不会在每次追加时创建一个新对象。

    例子:

    StringBuilder sb = new StringBuilder();
    sb.Append('a');
    sb.Append('b');
    sb.Append('c');
    string result = sb.ToString();
    Console.WriteLine(result); // prints 'abc'
    

    【讨论】:

      【解决方案3】:

      使用字符串生成器

      http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx

      并就地替换字符,这应该会加快速度

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-13
        • 1970-01-01
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 2010-10-03
        相关资源
        最近更新 更多