我有一个非常大的char数组,我需要转换为字符串,以使用正则表达式.
但是它太大了,当我将它传递给字符串构造函数时,我得到OutOfMemoryException.
但是它太大了,当我将它传递给字符串构造函数时,我得到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 }