2011-03-12 50 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