C# 修复C中JavaScript的字符串#

C# 修复C中JavaScript的字符串#,c#,string,C#,String,我有一个函数,用于修复C#for JavaScript中不可打印的字符。但是它工作得很慢!如何提高该功能的速度 private static string JsStringFixNonPrintable(string Source) { string Result = ""; for (int Position = 0; Position < Source.Length; ++Position) { int i

我有一个函数,用于修复C#for 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;
    }
私有静态字符串JsStringFixNonPrintable(字符串源)
{
字符串结果=”;
用于(int位置=0;位置<源.Length;++Position)
{
int i=位置;
var CharCat=char.getUnicodegory(来源,i);
if(Char.IsWhiteSpace(源[i])||
CharCat==System.Globalization.unicodecegory.LineSeparator||
CharCat==System.Globalization.unicodecegory.SpaceSeparator){Result+='';continue;}
如果(Char.IsControl(Source[i])&&Source[i]!=10&&Source[i]!=13)继续;
结果+=源[i];
}
返回结果;
}

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

例如:

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


并替换适当的字符,这将加快速度

我已经使用
StringBuilder
类,使用预定义的缓冲区大小重新编码了您的代码片段。。。这比你的样品快多了

    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();
    }
私有静态字符串JsStringFixNonPrintable(字符串源)
{
StringBuilder=new StringBuilder(Source.Length);//预定义与输入相同的大小
for(int it=0;it
我想使用regexp方法作为替代方法。