c# – 如何从char数组中创建一个字符串而不复制?

前端之家收集整理的这篇文章主要介绍了c# – 如何从char数组中创建一个字符串而不复制?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个非常大的char数组,我需要转换为字符串,以使用正则表达式.
但是它太大了,当我将它传递给字符串构造函数时,我得到OutOfMemoryException.

我知道这个字符串是不可变的,因此不可能指定它的底层字符集,但是我需要一种方法来使用正则表达式而不复制整个事物.

如何获取该数组?

>我使用StreamReader从一个文件获取它.我知道内容的起始位置和长度,Read和ReadBlock方法需要我提供一个char []缓冲区.

所以这里是我想知道的事情:

>有没有办法指定字符串的底层集合? (它甚至将其字符保留在数组中吗?)
> …或直接在char数组上使用Regex
> …或直接获取文件的一部分作为字符串?

解决方法

我会认为你最好的选择是将多个char []块看成与某个维度重叠的单个字符串.这样,您就可以在各个块上执行正则表达式,重叠将使您有能力确保块中的“中断”不会破坏搜索模式.以伪代码的方式:
int chunkSize = 100000;
int overLap = 2000;

for(int i = 0; i < myCharArray.length; i += chunkSize - overlap)
{
    // Grab your array chunk into a partial string
    // By having your iteration slightly smaller than 
    // your chunk size you guarantee not to miss any 
    // character groupings. You just need to make sure
    // your overlap is sufficient to cover the expression
    string chunk = new String(myCharArray.Skip(i).Take(chunkSize).ToArray());
    // run your regex
}

猜你在找的C#相关文章