C# 替换C中给定字符/字节数组中出现的所有字符串# 我来自C++背景,想知道C中是否存在任何让我做如下的魔术:< /P> char[] buf = new char[128*1024*1024]; // filling the arr buf = buf.ToString().Replace(oldstring, newstring).ToArray();

C# 替换C中给定字符/字节数组中出现的所有字符串# 我来自C++背景,想知道C中是否存在任何让我做如下的魔术:< /P> char[] buf = new char[128*1024*1024]; // filling the arr buf = buf.ToString().Replace(oldstring, newstring).ToArray();,c#,arrays,string,replace,char,C#,Arrays,String,Replace,Char,有没有可能做到快速(不是手工写所有东西)和高效(有一份缓冲区)?不太清楚提供的代码中的字符数组是什么,但是。。。 用于从char数组构造字符串,并在调用后替换为所需参数。由于字符串在.NET中是不可变的,因此最有效的内存处理方法是使用类 下面是一个例子: var buffer = new StringBuilder(128*1024*1024); // Fill the buffer using the 'StringBuilder.Append' method. // Examples: /

有没有可能做到快速(不是手工写所有东西)和高效(有一份缓冲区)?

不太清楚提供的代码中的字符数组是什么,但是。。。
用于从char数组构造字符串,并在调用后替换为所需参数。

由于字符串在.NET中是不可变的,因此最有效的内存处理方法是使用类

下面是一个例子:

var buffer = new StringBuilder(128*1024*1024);

// Fill the buffer using the 'StringBuilder.Append' method.
// Examples:
// buffer.Append('E');
// buffer.Append("foo");
// buffer.Append(new char[] { 'A', 'w', 'e', 's', 'o', 'm', 'e' });
// Alternatively you can access the elements of the underlying char array directly
// through 'StringBuilder.Chars' indexer.
// Example:
// buffer.Chars[9] = 'E';

buffer = buffer.Replace(oldstring, newstring);

如果您需要继续使用该数组(并且不能使用其他东西开始,例如,正如其他人建议的
StringBuilder
),则不需要。没有内置的“零拷贝”,即“用给定字符数组中的另一个(子)字符数组替换(子)字符数组”的方法。

它被用作(二进制/文本)文件缓冲区。假设您有一个非常大的文件,获取其中的一部分并以迭代的方式处理数据。顺便说一句,调用
string strbuf=new string(buf)
将分配更多内存,这是真的吗?是的,字符串在C#中是不可变的,因此它将分配一个新的内存块。ToString()生成一个副本。所以:不,汉斯·帕桑·米恩就是一个例子。
StringBuilder
类将字符串视为可变的,因此操作本身具有内存效率。