gpt4 book ai didi

c# - 如何在不复制的情况下从 char 数组创建字符串?

转载 作者:可可西里 更新时间:2023-11-01 08:30:02 25 4
gpt4 key购买 nike

我有一个非常大的字符数组,我需要将其转换为字符串以便在其上使用正则表达式。
但它太大了,当我将它传递给字符串构造函数时,我得到了 OutOfMemoryException

我知道字符串是不可变的,因此不应该可以指定它的底层字符集合,但我需要一种无需复制就可以使用正则表达式的方法整个事情。

我如何获得该数组?

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

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

  • 有没有办法指定字符串的底层集合? (它甚至将其字符保存在数组中吗?)
  • ...或直接在字符数组上使用正则表达式?
  • ...或者直接将文件的一部分作为字符串获取?

最佳答案

如果您有一个可以搜索的字符或模式,但保证不在您要查找的模式中,您可以扫描该字符的数组并创建较小的字符串以单独处理。过程是这样的:

char token = '|';
int start = 0;
int length = 0;
for(int i = 0; i < charArray.Length; i++;)
{
if(charArray[i] == token)
{
string split = new string(charArray,start,length);
// check the string using the regex

// reset the length
length = 0;
}
else
{
length++;
}
}

通过这种方式,您复制的是每次尝试后将被 GC 处理的字符串的较小片段,而不是整个字符串。

关于c# - 如何在不复制的情况下从 char 数组创建字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com