修复C#中JavaScript的字符串
本文关键字:字符串 JavaScript 修复 | 更新日期: 2023-09-27 17:59:17
我有一个函数,它为JavaScript修复了C#中不可打印的字符。但它的工作速度很慢!如何提高此功能的速度?
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;
}
我已经使用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();
}
不要连接到字符串,而是尝试使用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'
使用Stringbuilder
http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx
并将字符替换到位,这应该会加快