所以我注意到操縱Strings
是超慢的,當涉及到任何導致它調整大小,基本上刪除或添加字符(在我的情況下刪除)。使用固定字符[]複製數據並創建字符串,並不總是使用整個char [],安全嗎?
所以我想,使用stackalloc
或修復臨時緩衝區,只是複製所有數據,除了我不希望等於刪除相同的東西。
但我需要爲這個緩衝區分配相同的長度,因爲這是極限,它永遠不會比它大,但它肯定會降低。
所以這裏是代碼,我不知道這樣做的方式實際上是否安全, 因爲可以有很多從未使用的緩衝區。
//Remove all unneccessery empty spaces
private unsafe static string FormatCodeUnsafe(string text)
{
int length = text.Length;
var charbuffer = new char[length];
int index = 0;
fixed (char* charbuf = charbuffer)
fixed (char* strptr = text)
{
char* charptr = charbuf;
for (int i = 0; i < length; i++)
{
char c = strptr[i];
if (i > 0)
{
if (c == ' ' && strptr[i - 1] == ',')
continue;
if (c == ' ' && strptr[i - 1] == ')')
continue;
if (c == ' ' && strptr[i - 1] == ' ')
continue;
}
if (i < length - 1)
{
if (c == ' ' && strptr[i + 1] == ' ')
continue;
if (c == ' ' && strptr[i + 1] == ',')
continue;
if (c == ' ' && strptr[i + 1] == '(')
continue;
}
*charptr = c;
charptr++;
index++;
}
}
//Return the result
return new string(charbuffer, 0, index);
}
編輯:
硬答案既是之間做出選擇給予很好的例子和說明。 我想選擇兩種幫助,但我不得不選擇一個。 !
謝謝:)
我認爲如果輸入包含連續的空格,您的代碼不會給出所需的結果,因爲它們將被全部刪除。因此,如果單詞之間有多個空格,'abc def'將返回'abcdef'。 – Phil1970