2011-03-12 57 views
3

我有一个字符串“可能”比任何简单的int边界更长。C#长子字符串函数

目前,string.substring函数只接受int参数作为索引和长度,这对我来说是不够的,因为我需要很长的参数值类型。

你知道任何长子字符串函数的实现吗?

或者你推荐我做什么来解决这个可能的发现子串问题很长的字符串?

谢谢。

+6

长(> 2G字符)的字符串占用大于4GB的内存。你确定子字符串函数将成为你唯一的问题吗? – Jon 2011-03-12 12:40:30

+1

字符串有多长?那么子串呢?您可能不希望一次将整个字符串加载到内存中,而是使用文件流在搜索子字符串的同时读取部分文件? – 2011-03-12 12:40:45

+0

可能的字符串匹配过程可能只发生在内存上,机器的可用内存量可能非常大。这个操作将会工作的字符串是整个字符串是10G左右的字符,子字符串是1000个字符左右。我同意,除了资源需求之外,对这些大字符串的任何字符串匹配操作在算法上都是白痴。 – Gloomdo 2011-03-12 12:44:59

回答

6

我有一个字符串“可能”比任何简单的int边界更长。

不,在.NET中你不会有这个问题。 System.String类本身在任何地方都使用Int32索引和长度属性。

也许你会有一个超过2GB的(字符)数组,但这是照顾,你可以使用'长'索引。

相关问题:What is the maximum possible length of a .NET string?

+2

我喜欢评论_这是其中的一种情况,“如果你不得不问,你可能做错了什么。”_ – Gloomdo 2011-03-12 12:55:46

+0

甚至不是数组......请看这里:http:// stackoverflow。com/questions/573692/is-the-size-of-an-array-constrained-by-the-upper-limit-of-int-2147483647/573701#573701 and http://stackoverflow.com/questions/1087982/单个对象仍然限制到2 GB的大小in-clr-4-0/1088044#1088044 – xanatos 2011-03-12 13:25:33

+0

@xanatos:你说得对,我正在考虑LongLength属性,但这不是索引。 – 2011-03-12 13:42:19

0

正如在亨克提供状态的链接的答案,你不能在.NET中创建大小大于2GB的对象(64-bit also has this restriction)。

因此,无论如何你都不能有一个大的字符串。您将需要使用某种算法流的发现和隔离您感兴趣的数据。

0

正如亨克Holterman说System.String使用INT32 ....

但如果需要,使用unsigned int可以达到4.3亿: 试试uint。

uint stringLength = 4,294,967,295 

虽然它没有去比正常INT

INT要高得多 - > 2,147,483,648 2,147,483,647 UINT - > 0至4,294,967,295

0

此外,传统的子算法可能不能很好地工作,上该规模(实际上我不知道如何.Substring作品)。你可能想看看this