由于.NET Framework 有大约 21.5 亿个元素限制(即使考虑到 64 位 Windows、.NET 4.5+ 和 gcAllowVeryLargeObjects),我需要创建自己的BigStringBuilder来处理超大字符串。
不幸的是,现在我需要在课堂上使用正则表达式。似乎存在代码以在 StringBuilders 上运行更简单的 Regex 风格,尽管它显然没有经过很好的测试并且仅支持*
(替换许多字符)和?
(替换单个字符)。
无论如何,我没有使用 StringBuilder,如前所述,我使用的是我自己的 BigStringBuilder 类,其中基本的底层结构是一个 char 数组列表(即:)List<char[]> c = new List<char[]>();
。要检索巨型字符串中的任何字符,使用“聪明”索引器来访问矩形结构:
// Indexer for class BigStringBuilder:
public char this[long n]
{
get { return c[(int)(n / pagesize)][n % pagesize]; }
set { c[(int)(n / pagesize)][n % pagesize] = value; }
}
老实说,这并不是那么“聪明”,但这确实意味着所有字符串数据都可能分散在 List 中的众多 char 数组中。
我正在寻找允许 Regex(包括Regex.Replace()
)与此 BigStringBuilder 类一起工作的最有效方法或任何见解,请记住字符串可能比 2GB 大得多。